如何知道方法内部的方法是否已在XCTest中调用

时间:2016-01-11 09:27:48

标签: ios objective-c xctest

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

我想弄清楚的样本方法是

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

这里我如何检查或编写setUpLocation被调用的单元测试用例。(注意此方法不返回任何内容)。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

测试更容易!只要传递你需要的任何东西。然后,测试可以查询setUpLocation:所做的任何状态。

至于setupMapAria,您现在可以选择。你可以保留它,只需拨打setupMapAriaWithLocation:即可。或者你可以消除它,并改变呼叫者以传递当前位置。 ...您甚至可以通过让您处理当前位置以外的位置来发现您的程序更灵活。 (例如,用户在不同时间点的位置。)