我正准备使用OCMockito进行单元测试。现在我正在使用它来模拟UserDefaults
(通过依赖项注入)。
我可以通过以下方式控制返回的内容:[given([mockUserDefaults objectForKey:@"some key"]) willReturn:@"a value I want"];
现在我的问题是:如何检查用户为模拟UserDefaults
设置的值?
例如,如果用户发出:[self.userDefaults setObject:[NSDate date] forKey:"example"];
如何从模拟userDefaults
中取回date
?
OCMockito还没有捕获和返回参数的方法。相反,每个参数都必须满足OCHamcrest匹配器。如果没有指定匹配器,则假定equalTo
。
在单元测试中,测试[NSDate date]
通常不是一个好主意,因为您无法控制日期。但为了举例说明,这里验证了参数是anyNSDate。(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]
检索所有捕获的自变量的数组。