[英]Mockito: verify any() parameter is the same
我想做類似的事情:
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)
枚舉是相同的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
每個可能值對其進行MyEnum
。 您可以使用for
循環輕松完成此操作,也可以使用JUnit Parameterized
類的東西。
但是,這里可能不要求進行詳盡的測試。 取而代之的是,只需選擇一個具有代表性的子集,該子集應具有被測系統的所有預期行為。 使用MyEnum
任意選擇的元素進行測試可能就足夠了,如果這樣,這樣做就沒有害處。
一種常用的方法是選擇一個“樣本”值,並將其存儲在測試類的常量中。 通過明確表示,調試會更容易:如果以后發現您的代表值畢竟不是代表值,那么如果您在那里擁有該值,那么應該更容易調試。
TL; DR:一個任意選擇的值應該適合您的測試。 如果不是,那么解決方案是在測試中更加詳盡,而不是更加武斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.