我需要根据特定键值从模拟对象发送特定值。
从具体类:
map.put("xpath", "PRICE");
search(map);
从测试用例:
IOurXMLDocument mock = mock(IOurXMLDocument.class);
when(mock.search(.....need help here).thenReturn("$100.00");
如何模拟此键值对的此方法调用?
原文由 Sean 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现这试图解决创建带有 Map 参数的 Mockito 存根的类似问题。我不想为有问题的地图编写自定义匹配器,然后我找到了一个更优雅的解决方案:将 hamcrest-library 中的附加匹配器与 mockito 的 argThat 一起使用:
如果您需要检查多个条目,那么您可以使用其他 hamcrest 好东西:
对于非平凡的地图,这开始变得很长,所以我最终提取了方法来收集条目匹配器并将它们卡在我们的 TestUtils 中:
所以我剩下:
有一些与泛型相关的丑陋之处,我正在抑制一个警告,但至少它是干的并且隐藏在 TestUtil 中。
最后一点,注意 JUnit 4.10 中的嵌入式 hamcrest 问题。对于 Maven,我建议先导入 hamcrest-library,然后再导入 JUnit 4.11(现在是 4.12),并从 JUnit 中排除 hamcrest-core 只是为了更好的衡量:
编辑:2017 年 9 月 1 日——根据一些评论,我更新了我的答案以显示我的 Mockito 依赖项、我在测试实用程序中的导入以及截至今天运行绿色的 junit: