簡體   English   中英

如何驗證特定的類方法是作為參數傳遞的?

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

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