Ant*_*ton 5 java unit-testing mockito java-8
在我测试的MyClass类中,我有:
public void execute(){
service.call(ThisClass::method1);
}
Run Code Online (Sandbox Code Playgroud)
和以下:
void method1(){do 1;}
void method2(){do 2;}
Run Code Online (Sandbox Code Playgroud)
在测试中:
@Mock
Service service;
@Test
public void testCallMethod1()
{
MyClass myClass = new MyClass();
myClass.execute();
service.verify(any(Runnable.class));
}
Run Code Online (Sandbox Code Playgroud)
它有效,但是,如何验证参数而不是任何Runnable是method1而不是method2?
我正在寻找看起来像的解决方案(例如,不是真的有效):
service.verify(eq(MyClass::method1.getRunnable()))
Run Code Online (Sandbox Code Playgroud)
以下对我有用:
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);
}
Run Code Online (Sandbox Code Playgroud)
}
关键是提取方法引用 lambda 并在执行和验证中使用它。否则,每个“::”运算符都会生成一个不同的 lambda 实例,该实例不适用于相等测试,因为上面的一些注释讨论了 lambda 相等的语义。
归档时间: |
|
查看次数: |
160 次 |
最近记录: |