使用 OCMockito 测试发送到模拟协议的参数

Posted

技术标签:

【中文标题】使用 OCMockito 测试发送到模拟协议的参数【英文标题】:Testing the parameters send to a Mock Protocol with OCMockito 【发布时间】:2013-04-10 14:38:09 【问题描述】:

美好的一天, 我正在使用 OCHamcrest 和 OCMockito 开始我的使用 TDD 方法的道路,它们真的很酷的工具,但有一点我似乎不了解模拟协议并尝试评估参数。

考虑代码自带的例子:

- (void)testVerifyWithMatcherForPrimitive

    NSMutableArray *mockArray = mock([NSMutableArray class]);

    [mockArray removeObjectAtIndex:2];

    [[verify(mockArray) withMatcher:greaterThan([NSNumber numberWithInt:1]) forArgument:0]
     removeObjectAtIndex:0];    // The 0 is a placeholder, replaced by the matcher

它按预期工作,但是当我尝试使用模拟协议复制它时,它总是通过测试,例如:

- (void)testFirstParameter

    // given
    id<TestProtocol> mockElement = mockProtocol(@protocol(TestProtocol));

    // when
    id toProcess = nil;
    [mockElement process: toProcess];

    // then
    id firstArgumentMatcher = instanceOf([NSArray class]);
    [[verify(mockElement) withMatcher: firstArgumentMatcher forArgument: 0] process: toProcess];

在这个测试中,我试图测试参数是 NSArray 类的实例,它不应该通过。你能帮我发现我做错了什么吗?

非常感谢,

路易斯·亚历杭德罗

【问题讨论】:

【参考方案1】:

我想你想要

[[verify(mockElement) process:instanceOf([NSArray class])];

仅将withMatcher:forArgument: 用于原始参数。

【讨论】:

没错!非常感谢...(感谢您提供的出色工具):)

以上是关于使用 OCMockito 测试发送到模拟协议的参数的主要内容,如果未能解决你的问题,请参考以下文章

用于 PC Mockito 模拟验证的自定义 Hamcrest 匹配器

返回参数被发送到 Mockery 模拟函数?

如何在 Kiwi 中为模拟方法设置参数期望

一些涉及块方法和 OCMockito 的验证

如何使用soapUI模拟webservice客户端发送请求

OCMockito / OCHamcrest 验证数组包含对象属性