gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:43:08 24 4
gpt4 key购买 nike

我想做这样的事情:

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 ← MyEnum   where o ← MyClass   MyClassUtils.method(o, x) ⇒ o.method(x)

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

要彻底测试此特征,您需要针对 MyEnum 的每个可能值进行验证。您可以使用 for 循环轻松完成此操作,也可以使用 JUnit Parameterized 运行器之类的东西。

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

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

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

关于java - Mockito:验证any()参数是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com