【问题标题】:How to use OCMockito to check the value inserted into UserDefault如何使用 OCMockito 检查插入 UserDefault 的值
【发布时间】:2013-07-22 19:20:20
【问题描述】:

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

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

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

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

如何从模拟 userDefaults 中取回 date

【问题讨论】:

  • 我直接用[self.userDefaults objectForKey:@"example"]试过了,结果不正确

标签: ios unit-testing ocmockito


【解决方案1】:

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

在单元测试中测试[NSDate date] 通常不是一个好主意,因为您无法控制日期。但是为了举例,这里验证参数是 any 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] 检索所有捕获的参数的数组。

【讨论】:

  • 谢谢@乔恩!我也一直在关注Quality Coding 上的截屏视频。它们对我们新手很有帮助!
  • OCMock 怎么样?它会捕获并返回吗?
  • OCMockito 1.1.0 添加了一种捕获参数的方法。
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多