我在模仿使用OCMock的协议。我尝试为我的mockDelegate设置我的属性,但是它没有被设置。我做错了什么吗?
id mockDelegate = [OCMockObject mockForProtocol:@protocol(TestDelegate)];
[mockDelegate setMyFloatProperty:100.0];发布于 2016-03-29 12:55:24
OCMock将为您创建实现协议的方法(包括myFloatValue属性),但是,在默认情况下,它们不会对零对象执行默认值以外的任何操作:
- (CGFloat)myFloatProperty {
return 0.0f;
}
- (void)setMyFloatProperty {
}如果希望myFloatProperty始终返回特定值,则需要使用OCMStub对该属性的getter进行存根:
id mock = OCMProtocolMock(@protocol(TestDelegate));
[mock setMyFloatProperty:100.0f];
NSLog(@"%f", [mock myFloatProperty]); // prints 0.000000
OCMStub([mock myFloatProperty]).andReturn(100.0f);
NSLog(@"%f", [mock myFloatProperty]); // prints 100.000000如果希望在测试过程中更改属性,则有几个选项。最简单的方法是在测试用例类上创建存根属性,并将存根方法重定向到该属性。
@interface MyTestCase : XCTestCase
@property CGFloat stubMyFloatProperty;
@end
@implementation MyTestCase
- (void)testTestDelegate {
id mock = OCMProtocolMock(@protocol(TestDelegate));
[[[[mock stub] ignoringNonObjectArgs] andCall:@selector(setStubMyFloatProperty:) onObject:self] setMyFloatProperty:0.0f];
OCMStub([mock myFloatProperty]).andCall(self, @selector(stubMyFloatProperty));
[mock setMyFloatProperty:100.0f];
NSLog(@"%f", [mock myFloatProperty]); // prints 100.000000
}
@end注意,因为myFloatProperty是一个基本类型,所以您必须使用非标准的OCMock语法来对任意值进行适当的存根。有关更多细节,请参见this answer。
https://stackoverflow.com/questions/36265259
复制相似问题