OCMock没有传播到实现代码 - iOS Xcode CocaPod

时间:2014-09-16 18:39:04

标签: ios xcode cocoapods ocmock

我无法让我的OCMock制作的模拟在测试期间传播到我的实现代码中。

我已经使用CocoaPods将OCMock安装到我的iOS项目中,并尝试过多次类模拟和部分对象模拟实现。

例如:

MYCLASS的实施代码

+ (int) returnsFive { 
     return 5;
}

MYCONTROLLER的实施代码

#import "MyClass.h"

- (void) viewDiDLoad { 
     self.number = [MyClass returnsFive]; 
}

测试代码

id myClassMock = [[MyClass alloc] init];
OCMStub([myClassMock returnsFive]).andReturn(7);

NSLog(@"%@", [MyClass returnsFive]); // -- ((this prints out 7))

[MyController layoutIfNeeded]; // -- ((runs viewDidLoad))

XCTAssertEqual(MyController.number, 7, @"the number property on MyController should be set to 7 after mock"); 

// -- ((this fails, MyController.number equals 5 and not 7 as stubbed out))  

结论和问题

类测试在测试中运行时有效,但是,当在实现代码中运行时,模拟不会继承。实际的类(即MyClass)运行而不是模拟。

我们已尝试使用不同的模拟变体(即对象上的部分模拟和在实例方法上使用模拟而不是类方法)。所有这些都产生了完全相同的结果,其中mock不会传播到实现代码中。

1。)这甚至可能吗? (似乎一定是这样)

2。)我们缺少一些设置步骤吗? (我们用CocoaPods安装了OCMock,并使用#import将框架导入到我们的testClass中)

3.。)关于如何解决我们的困境的任何想法???

1 个答案:

答案 0 :(得分:0)

您可以在此处看到一个功能齐全的示例:

https://github.com/uShip/ocmock-singletons-example

查看名为“testToggleOnRegistersForPushNotifications_On_OCMock_NoDI”的测试。它为UIApplication创建了一个模拟器,并验证模拟实例的某些方法是否被调用。