我正盯着使用 OCMockito 进行单元测试。现在我用它来模拟UserDefaults
(通过依赖注入)。
我可以通过以下方式控制返回的内容:
[given([mockUserDefaults objectForKey:@"some key"]) willReturn:@"a value I want"];
现在我的问题是:如何检查用户设置为模拟UserDefaults
的值?
例如,如果用户发出:
[self.userDefaults setObject:[NSDate date] forKey:"example"];
如何从模拟date
中获取userDefaults
?
答案 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]
检索所有捕获的参数的数组。