hamcrest matcher和argThat方法的问题



我在testclass中得到了这段代码:

then(collector()).should().emit(eq(myStream), eq(myTuple),
        argThat(allOf(hasItem(anyString()), hasItem("test1"), hasItem("test2"))));

问题是我不知道第一个Item的值。我只知道值的类型是String

如果我执行测试,我得到消息:

参数匹配器的无效使用!预期3个匹配器,记录5个

此外:

如果匹配器与原始值结合使用,可能会出现此异常://不正确的:someemethod (anyObject(), "raw String");当使用匹配器时,所有参数都必须由匹配器提供。例如://正确的:someemethod (anyObject(), eq("String by matcher"));

我现在看不出问题所在。

谢谢你的帮助

问题是在嵌套匹配器时不能使用Mockito Matchers。必须使用Hamcrest或其他自定义匹配器。潜在的问题是,argThat被算作一个mockito匹配器以及anyString()和这些匹配器被应用到单个参数导致错误(我不知道为什么mockito不支持这个)。将anyString转换为Hamcrest匹配器应该可以解决这个问题。试试以下命令:

then(collector()).should().emit(eq(myStream), eq(myTuple),
    argThat(allOf(hasItem(isA(String.class)), hasItem("test1"), hasItem("test2"))));

相关内容

  • 没有找到相关文章

最新更新