在 XCTest 中如何知道方法中的方法是不是已被调用
Posted
技术标签:
【中文标题】在 XCTest 中如何知道方法中的方法是不是已被调用【英文标题】: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的网站有你需要知道的一切。 【参考方案1】:我猜你不想测试setUpLocation
已被调用。如果可能的话,更好的测试是在给定特定位置的情况下测试该方法的所需结果。
在这种情况下,挑战是用测试输入代替[UserDetails currentLocation]
,以便您可以控制测试。我们要注入依赖。
Dependency Injection 有多种形式。在您的示例中,额外的挑战是在生产代码中,setupMapAria
每次都应该获得当前位置的新实例。
一个简单的方法是使用方法注入。我们可以创建一个新方法:
-(void)setupMapAriaWithLocation:(UserLocation *)location;
测试更容易!只需传递您需要的任何内容。然后测试可以查询setUpLocation:
所做的任何事情的状态。
至于setupMapAria
,你现在可以选择了。您可以保留它,只需调用setupMapAriaWithLocation:
。或者您可以消除它,并将调用者更改为传入当前位置。 …您甚至可能会发现您的程序因此更加灵活,因为您可以处理当前位置以外的位置。 (例如,用户在不同时间点的位置。)
【讨论】:
以上是关于在 XCTest 中如何知道方法中的方法是不是已被调用的主要内容,如果未能解决你的问题,请参考以下文章