0

我正盯着使用OCMockito进行单元测试。现在我用它来模拟一个UserDefaults(通过依赖注入)。

我可以通过以下方式控制返回的内容: [given([mockUserDefaults objectForKey:@"some key"]) willReturn:@"a value I want"];

现在我的问题是:如何检查用户设置为 mock 的值UserDefaults

例如,如果用户发出: [self.userDefaults setObject:[NSDate date] forKey:"example"];

我如何date从模拟中获得背部userDefaults

4

1 回答 1

2

OCMockito (还)没有办法捕获和返回参数。相反,每个参数必须满足 OCHamcrest 匹配器。如果未指定匹配器,则equalTo假定为。

在单元测试中测试[NSDate date]通常不是一个好主意,因为您无法控制日期。但为了举例,这里验证参数是任何NSDate。(sut是“被测系统”。)

[verify(sut.userDefaults) setObject:instanceOf([NSDate class]) forKey:@"example"];

所以在这里,第一个匹配器是instanceOf匹配任何 NSDate。

第二个匹配器是隐式的equalTo(@"example)

更新:

OCMockito 1.1.0 有一种捕获参数的方法,使用 MKTArgumentCaptor:

MKTArgumentCaptor *argument = [[MKTArgumentCaptor alloc] init];
[verify(sut.userDefaults) setObject:[argument capture] forKey:@"example"];

您可以使用 检索捕获的参数[argument value],或者使用 检索所有捕获的参数的数组[argument allValues]

于 2013-07-23T04:36:59.990 回答