我在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"))));