问题
I have a private property that is declared in the .m file of my class to be tested, let's call it ClassUnderTest. ClassUnderTest instantiates an instance of ClassToBeMocked. How do I use OCMock to mock out an instance of the ClassToBeMocked and assign it to the ClassUnderTest?
回答1:
Re-declare the property in your test class. You can do the same for private methods. In ClassUnderTestTest.m:
@interface ClassUnderTest ()
@property(retain)ClassToBeMocked *instanceToBeMocked;
-(void)somePrivateMethod;
@end
回答2:
Does the following work?
id classUnderTest = ... // get from somewhere
id mock = [OCMockObject mockForClass:[ClassToBeMocked class]];
[classUnderTest setValue:mock forKey:@"nameOfThatPrivateProperty"];
Not totally sure whether you can set private properties like this. I think it depends on what kind of property it is.
来源:https://stackoverflow.com/questions/11893502/how-do-you-mock-out-private-properties-with-ocmock-for-ios