簡體   English   中英

如何使用Mockito驗證未使用任何參數組合調用的模擬方法

[英]How to verify mocked method not called with any combination of parameters using Mockito

如何使用Mockito驗證模擬方法根本沒有被調用 - 使用任何參數組合?

例如,我有一個對象 - myObject - 使用第二個myMockedOtherObject對象 - myMockedOtherObject - 它有一個方法 - someMethodOrOther(String parameter1, String parameter2)

我想調用myObject.myMethod()並驗證someMethodOrOther() 沒有被調用 - 使用任何參數組合。

例如:

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther();

除非我不能這樣做,因為someMethodOrOther()需要提供特定的參數。

你可以用Mockito的論證匹配器來完成你想要的東西:

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther(
    Mockito.anyString(),
    Mockito.anyString()
);

你可以說,少一點冗長用靜態導入像你這樣有verifynever

你需要使用參數匹配器來做這樣的事情。 您提供了一個參數匹配器來對應方法中的每個參數,但您必須確保選擇一個具有正確類型的參數。 您可能需要的所有內容都列在http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html

假設你的方法是

public void myMethod(
    String text, int count, MyClass something, List<MyClass> someList) {
    // ...
}  

您的驗證聲明可能如下所示。

verify(myMock, never()).myMethod(
    anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));

您可能需要的一些匹配器是 -

  • anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble() - 這些匹配每種類型的原始版本或對象版本。 在我的例子中,我使用anyInt()匹配一個int ,但它也匹配一個Integer
  • any(XXX.class) - 這將匹配任何對象類型。 在我的例子中,我用它來匹配MyClass
  • anyString() - 這是編寫any(String.class)的另一種方法
  • anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class) - 這些適用於匹配標准泛型集合類型。 在我的例子中,我使用anyListOf來匹配List<MyClass>

還有一些其他人,我強烈建議您通過Javadoc進行簡短的瀏覽。 但是這些是你最有可能使用never()

更清晰地呈現解決方案的方式

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.never;

//Testing scenario

verify(mockObject, never()).someMethod(mockParam1, MockParam2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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