【问题标题】:How do I use OCMockito to verify behaviours on a readonly property?如何使用 OCMockito 验证只读属性的行为?
【发布时间】:2014-04-25 23:17:26
【问题描述】:

我正在使用带有 ReactiveCocoa 的 MVVM 和 OCMockito 进行测试。假设我有一个 ViewController A 和 ViewController B。A 需要对 B 执行 segue。我想验证当这种情况发生时,A 首先通过赋值将必要的数据(“模型”)传递给 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 表示部分模拟已被删除。为什么?!

【问题讨论】:

    标签: objective-c readonly ocmockito partial-mocks


    【解决方案1】:

    我会修改init 以接受“ViewModel”并将其分配给只读属性。在此之后,您可以模拟模型并验证 setter 调用。

    我不太喜欢修改 API 以测试类,但这种更改可能对您的设计来说是自然而然的。

    我还注意到 - 双点的用法。这对我来说是非常明显的关于 API 必要更改的迹象

    【讨论】:

    • 是的,好点——我现在正在使用故事板,所以我让 iOS 处理我的视图控制器实例化。这也是它如此痛苦的部分原因:我无法定义一个单独的init 来传递我希望传入的数据。
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多