Jus*_*oss 33 cocoa mocking objective-c mockito ocmock
在我的日常工作中,我被Mockito的never()验证所破坏,这可以确认一个模拟方法永远不会被调用.
有没有办法用Objective-C和OCMock完成同样的事情?我一直在使用下面的代码,它可以工作,但感觉就像一个黑客.我希望有更好的方法......
- (void)testSomeMethodIsNeverCalled {
id mock = [OCMockObject mockForClass:[MyObject class]];
[[[mock stub] andCall:@selector(fail) onObject:self] forbiddenMethod];
// more test things here, which hopefully
// never call [mock forbiddenMethod]...
}
- (void)fail {
STFail(@"This method is forbidden!");
}
Run Code Online (Sandbox Code Playgroud)
Ins*_*ame 61
自OCMock的r69以来,可以拒绝方法调用http://svn.mulle-kybernetik.com/OCMock/trunk/Source/Changes.txt
好的模拟/快速失败当在未使用expect或stub设置的模拟对象上调用方法时,模拟对象将引发异常.可以通过创建"漂亮"模拟来关闭此失败快速模式:
Run Code Online (Sandbox Code Playgroud)id mock = [OCMockObject niceMockForClass:[SomeClass class]]虽然好的模拟将忽略所有意外的方法,但可以禁止特定的方法:
Run Code Online (Sandbox Code Playgroud)[[mock reject] someMethod]请注意,在故障快速模式下,如果忽略该异常,则在调用verify时将重新抛出该异常.这使得可以确保可以检测到来自通知等的不期望的调用.
引用自:http://www.mulle-kybernetik.com/software/OCMock/#features
Joh*_*lph 19
据我所知,当您调用verify时,OCMock将自动失败,并且调用尚未记录的方法.如果调用意外方法就不会抱怨的模拟被称为"漂亮的模拟".
- (void)testSomeMethodIsNeverCalled {
id mock = [OCMockObject mockForClass:[MyObject class]];
[mock forbiddenMethod];
[mock verify]; //should fail
}
Run Code Online (Sandbox Code Playgroud)
从版本3.3开始,OCMock具有OCMReject宏.
id mock = OCMClassMock([MyObject class]);
OCMReject([mock forbiddenMethod]);
// exception will raise
[mock forbiddenMethod];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14512 次 |
| 最近记录: |