mocking - Mockito.mockedStatic 用于带参数的方法

标签 mocking mockito

为 mockedStatic 方法提供的所有示例都是针对没有参数的方法。有没有办法用参数模拟方法。
提供的例子:
https://javadoc.io/static/org.mockito/mockito-core/3.4.6/org/mockito/Mockito.html#static_mocks

 mocked.when(Foo::method).thenReturn("bar");
 assertEquals("bar", Foo.method());
 mocked.verify(Foo::method);
 } 
我想要的是:
我在下面尝试过,但它不起作用。mocked.when(Foo.methodWithParams("SomeValue"))

最佳答案

编辑 - Mockito 3.7.7
Mockito 3.7.7验证参数的统一顺序(问题 #2173)
更新代码:

try (MockedStatic<Foo> dummyStatic = Mockito.mockStatic(Foo.class)) {
    dummyStatic.when(() -> Foo.method("param1"))
               .thenReturn("someValue");
    // when
    System.out.println(Foo.method("param1"));
    //then
    dummyStatic.verify(
            () -> Foo.method("param1"),
            times(1), 
    );
}
原答案
有可能,您需要使用 lambda 而不是方法引用:
try (MockedStatic<Foo> dummyStatic = Mockito.mockStatic(Foo.class)) {
    dummyStatic.when(() -> Foo.method("param1"))
               .thenReturn("someValue");
    // when
    System.out.println(Foo.method("param1"));
    //then
    dummyStatic.verify(
            times(1), 
            () -> Foo.method("param1")
    );
}

关于mocking - Mockito.mockedStatic 用于带参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63172397/

相关文章:

android - 使用 mockito-android 警告

java - 模拟无状态 session bean 会给出 javax.naming.NoInitialContextException

java - 我可以使用 Mockito 插入延迟然后调用真正的方法吗?

Java:用于测试的模拟外部库

PHPUnit 模拟抛出不兼容的声明错误

java - 如何在 Spring Boot 中创建假 FeignClient?

java - 使用 Spock 进行模拟时如何取消对参数数量的限制?

javascript - 开 Jest : Mocking navigator. 存储.坚持

java - 预期 Mockito 测试异常

java - 如何在对模拟的不同调用中返回不同的值?