有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Mockito验证未失败

我正试图让Mockito中的verify方法起作用。我有以下测试:

@Test
public void testShouldFail()
{
    String string = mock(String.class);
    string.length();
    verify(string, times(100)).length();
}

这个测试应该失败,但它通过了。有人知道为什么吗?我用Mockito错了吗

更新

下面是另一个不会失败的例子:

private interface Bar
{
    public void foo();
}

@Test
public void testShouldFail()
{
    Bar bar = mock(Bar.class);
    bar.foo();
    verify(bar, times(100)).foo();
}

共 (1) 个答案

  1. # 1 楼答案

    嗯,您应该注意这一点:默认情况下,不能模拟final类(比如^{)^框架的{a1}

    您的示例失败,并显示正确的错误消息:

    org.mockito.exceptions.base.MockitoException: 
    Cannot mock/spy class java.lang.String
    Mockito cannot mock/spy following:
      - final classes
      - anonymous classes
      - primitive types
        at Test.testShouldFail(Test.java:6)
             ...
    

    因此,我猜您的项目中可能存在一些小的配置问题。您使用的是哪个IDE?你有哪个版本的Mockito?如何运行测试

    您可以尝试使用一些额外的工具包,如PowerMock,它可以帮助您overcome this limitation。这个框架可以很容易地与Mockito结合使用

    另一方面,Stringjava.lang包的一部分,我假设VM对这些类进行了一些额外的安全验证(尽管不确定)。我不相信您可以模拟(即,操纵字节码)这样的类(例如,如果您试图在java.*包中放入某些内容,就会出现编译错误)。但这只是我的一个假设