如何使用OCMockito检查插入UserDefault的值

时间:2013-07-22 19:20:21

标签: ios unit-testing ocmockito

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

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

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

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

如何从模拟date中获取userDefaults

1 个答案:

答案 0 :(得分: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]检索所有捕获的参数的数组。