gpt4 book ai didi

java - 如何验证特定的类方法是否作为参数传递?

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:31 26 4
gpt4 key购买 nike

在我测试的 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 相等性的语义。

关于java - 如何验证特定的类方法是否作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com