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



我正准备使用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]检索所有捕获的自变量的数组。

最新更新