[英]How to verify that specific class method was passed as parameter?
在我測試的MyClass類中,我有:
public void execute(){
service.call(ThisClass::method1);
}
和以下:
void method1(){do 1;}
void method2(){do 2;}
在測試中:
@Mock
Service service;
@Test
public void testCallMethod1()
{
MyClass myClass = new MyClass();
myClass.execute();
service.verify(any(Runnable.class));
}
它有效,但是,如何驗證參數而不是任何Runnable是method1而不是method2?
我正在尋找看起來像的解決方案(例如,不是真的有效):
service.verify(eq(MyClass::method1.getRunnable()))
以下適用於我:
public class MyTest {
public static class X{
static void method1() {};
static void method2() {};
}
@Test
public void throwAway() {
ExecutorService service = mock(ExecutorService.class);
Runnable command1 = X::method1;
Runnable command2 = X::method2;
service.execute(command1);
verify(service).execute(command1);
verify(service, never()).execute(command2);
}
}
關鍵是提取方法引用lambda並在執行和驗證中使用它。 否則,每個“::”運算符都會產生一個不同的lambda實例,它不能用於相等性測試,因為上面的一些注釋討論了lambda相等的語義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.