我的项目有一组单元测试,它们是围绕OCMock(3.1.1通过CocoaPods),Xcode 6.1和iOS 8.1构建的。在测试中,我使用以下代码行在一个部分模拟的类中存根一个方法(其中PROJECTSTAEINTERVAL是一些#defined值)。
OCMStub([partialMockRequest getLocalProjects]).andReturn([NSDate dateWithTimeIntervalSinceNow:PROJECTSTALEINTERVAL/2]);
正常的getLocalProjects方法返回一个NSDate,因此对于stubbed方法中返回值的类型不应该有任何异常。最初这个单元测试没有问题,因为它应该是从另一个方法调用getLocalProjects的地方返回NSDate:
NSDate *projectDateInLocalStore = nil;
// get the local projects and see what the the latest date is.
projectDateInLocalStore = [self getLocalProjects];
然而,当项目中的新人尝试使用相同的代码库(即从git中提取)运行相同的单元测试时,单元测试失败,因为从getLocalProjects返回的对象不是正确的类型并且调用NSDate函数引发异常。返回的类型如下所示:
由于我们都使用相同的代码,因此我们认为它是项目中的一个设置,但无法确定设置的不同之处。昨天,在没有改变任何知识的情况下,我的单元测试开始失败,我现在也看到从我的存根方法返回的OCMReturnValueProvider类型。唯一确实发生的事情是我的pod设置不同步而且必须重建。
我可以通过更改单元测试来解决问题,如下所示:
NSDate *staleDate = [NSDate dateWithTimeIntervalSinceNow:PROJECTSTALEINTERVAL/2];
OCMStub([partialMockRequest getLocalProjects]).andReturn(staleDate);
虽然我有一个解决方法,但我很好奇我最初做的事情是不正确导致奇怪的行为。以前有人见过这种事吗?任何想法为什么第二种方法现在有效,但第一种方法不适用?
感谢您的帮助