【问题标题】:How to know whether the method inside a method has been called or not in XCTest在 XCTest 中如何知道方法中的方法是否已被调用
【发布时间】:2016-01-11 09:27:47
【问题描述】:

如何使用 Xcode 7 在 XCTest 框架中验证方法内的方法是否已被调用。

我想弄清楚的示例方法是

-(void)setupMapAria {
//some code
[self setUpLocation:[UserDetails currentLocation]];
//some code.
}

这里我如何检查或编写单元测试用例setUpLocation 是否被调用。(注意这个方法不返回任何东西)。

【问题讨论】:

  • 最简单的测试方法是使用模拟。
  • 会在 xcode 7.2 中模拟支持吗?怎么做。我认为它是在旧版本的 xcode 中。
  • 我是单元测试新手。如果可能的话,给我一个带有 OCMock 框架的 xcode 7.2 文档链接的链接
  • OCMock的网站有你需要知道的一切。

标签: ios objective-c xctest


【解决方案1】:

我猜你不想测试setUpLocation 已被调用。如果可能的话,更好的测试是在给定特定位置的情况下测试该方法的所需结果

在这种情况下,挑战是用测试输入代替[UserDetails currentLocation],以便您可以控制测试。我们要注入依赖。

Dependency Injection 有多种形式。在您的示例中,额外的挑战是在生产代码中,setupMapAria 每次都应该获得当前位置的新实例

一个简单的方法是使用方法注入。我们可以创建一个新方法:

-(void)setupMapAriaWithLocation:(UserLocation *)location;

测试更容易!只需传递您需要的任何内容。然后测试可以查询setUpLocation: 所做的任何事情的状态。

至于setupMapAria,你现在可以选择了。您可以保留它,只需调用setupMapAriaWithLocation:。或者您可以消除它,并将调用者更改为传入当前位置。 …您甚至可能会发现您的程序因此更加灵活,因为您可以处理当前位置以外的位置。 (例如,用户在不同时间点的位置。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多