Mockito.mockedStatic 用于带参数的方法

sbh*_*bha 10 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);
 } 
Run Code Online (Sandbox Code Playgroud)

我想要什么:我在下面尝试过,但不起作用。

mocked.when(Foo.methodWithParams("SomeValue"))

Les*_*iak 35

编辑 - Mockito 3.7.7

Mockito 3.7.7统一校验参数顺序(Issue #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), 
    );
}
Run Code Online (Sandbox Code Playgroud)

原答案

有可能,您需要使用 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")
    );
}
Run Code Online (Sandbox Code Playgroud)