我从来没有存根接受函数接口/方法引用作为参数的调用,所以我只是发现除了引用比较之外,与"等于"这些进行比较的明显无能为力。
那么在测试过程中如何处理这种情况呢?我们是否必须使用任何()我们想要它?
Comparator<String> comparator = Comparator.naturalOrder();
when(myColaborator.isCalledWith(comparator)).thenReturn("foo"); //This is not gonna work as long as the real call does not use theat very same reference
有必要在一个简单的测试用例中验证其合作者是否收到了确切的Comparator
,因为GOOS书中的这种通信协议测试描述了它们是否可以正确协同工作。 然后跳过使用any(Comparator.class)
检查其余测试。 您可以在马丁的博客中进一步阅读:
在第二个测试用例中,我通过使用
withAnyArguments
放宽了对期望的限制。这样做的原因是第一个测试检查编号是否传递到仓库,因此第二个测试不需要重复测试的该元素。如果以后需要更改顺序的逻辑,则只有一个测试会失败,从而减轻了迁移测试的工作量。事实证明,我本可以完全省略withAnyArguments
,因为这是默认设置。