在我测试的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()))
答案 0 :(得分:1)
以下适用于我:
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相等的语义。