Mockito:验证any()参数是否相同



我想做一些类似的事情:

MyEnum myEnum = any();  // This is not allowed throws InvalidUseOfMatchersException
MyClassUtils.method(myClass, myEnum);
// Verify MyClassUtils.method(MyEnum) calls myClass.method(MyEnum)
verify(myClass).method(myEnum);

这个想法是,我不在乎哪个枚举被传递到MyClassUtils#method(MyEnum),只要它是传递到MyClass#method(MyEnum)的同一个枚举。

问题:有没有一种Mockito方法可以让我在不指定特定枚举的情况下测试它?


我知道我可以用

MyEnum myEnum = MyEnum.FIRST;

但是,这似乎有误导性,因为它表明我正在测试MyEnum.FIRST特定的东西。

您正在向后考虑您的测试:您试图验证的MyClassUtils对象的特征是:"无论MyEnum的哪个实例被传递到它,它总是用同一实例调用myObject.method"。

粗略翻译,这是:

∀x: x&left-arrow;MyEnum其中o&left-arrow;类名MyClassUtils.method(o,x)⇒o.method(x)

(请原谅我糟糕的数学编辑技巧。)

为了详尽地测试这个特性,您需要针对MyEnum的每个可能值对其进行验证。您可以通过使用for循环来轻松实现这一点,也可以使用类似JUnit Parameterized的运行程序。

然而,这里可能不需要进行详尽的测试。相反,只需选择一个具有代表性的子集,该子集应能实现测试中系统的所有预期行为。用任意选择的MyEnum元素进行测试是足够的,如果是这样,那么这样做也没有害处。

一种常见的方法是选择一个"sample"值并将其存储在测试类的常量中。通过显式,调试更容易:如果后来发现你的代表值根本不具有代表性,那么如果你有这个值,调试应该会更容易。

TL;DR:一个任意选择的值应该适合您的测试。如果不是,解决方案是在测试中更加详尽,而不是更加武断。

相关内容

  • 没有找到相关文章

最新更新