我正在使用MVVM和ReactiveCocoa,以及OCMockito进行测试。假设我有一个ViewController A和ViewController B.需要执行一个segue到B.我想验证当发生这种情况时,A首先通过赋值将必要的数据('model')传递给B.
B
看起来像这样:
@interface ViewControllerB : UITableViewController
@property(nonatomic, readonly) ViewModel *viewModel;
@end
在视图控制器A
的某处,有一个声明:
viewControllerB.viewModel.model = newModel; // passes new data along for B to display
我想验证此分配是否正在发生,但viewModel
属性是只读的。 viewModel由viewController的init方法初始化。
我怎么能在这里模拟出viewModel?
我可以部分模拟viewControllerB来返回一个模拟viewModel
,然后我验证,但是https://github.com/jonreid/OCMockito/issues/38表示已经删除了部分模拟。为什么呢?!
答案 0 :(得分:0)
我会修改init
以接受'ViewModel'并将其分配给readonly属性。在此之后,您可以模拟模型并验证setter调用。
我不是一个很大的粉丝来修改API只是为了能够测试类,但可能这种改变对你的设计很自然。
我也注意到了 - 双点用法。对于我来说,这显然是关于API
的必要更改的标志