小编 Ri*_*man的帖子

无法使用 Mockito 模拟带有参数的静态方法

我正在尝试使用 Mockito 的一些新功能,特别是静态方法的模拟。

当我模拟的方法没有参数时,我可以让它工作,但由于某种原因,如果该方法有任何参数,它就不起作用。

正如下面的示例所示,测试assertEquals( "bar", Foo.foo() )有效,但测试assertEquals(2, map.size() )失败,因为没有为模拟类定义行为。

fooMock.when(Foo::genMap).thenCallRealMethod()给出以下编译时错误:

  • 类型 Foo 没有定义适用于此的 genMap()
  • MockedStatic 类型中的方法 when(MockedStatic.Verification) 不适用于参数 (Foo:: genMap)

fooMock.when( (String s)->Foo.genMap(s) ).thenCallRealMethod()给出这些编译时错误:

  • MockedStatic 类型中的方法 when(MockedStatic.Verification) 不适用于参数 ((String s) -> {})
  • Lambda 表达式的签名与函数式接口方​​法 apply() 的签名不匹配

单元测试:

@RunWith(MockitoJUnitRunner.class)
public class FooTest {

    @Test
    public void fooTest(){  
        try( MockedStatic<Foo> fooMock = Mockito.mockStatic(Foo.class) ){
            fooMock.when(Foo::foo).thenReturn("bar");
            assertEquals( "bar", Foo.foo() );
            //fooMock.when(Foo::genMap).thenCallRealMethod();
            //fooMock.when( (String s)->Foo.genMap(s) ).thenCallRealMethod();
            Map<String, String> map = Foo.genMap("1=one 2=two");
            assertEquals(2, map.size() );
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java lambda static-methods unit-testing mockito

0
推荐指数
1
解决办法
9433
查看次数

标签 统计

java ×1

lambda ×1

mockito ×1

static-methods ×1

unit-testing ×1