簡體   English   中英

Mockito:驗證any()參數是否相同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM