Mockito验证没有失败

Lan*_*opp 5 java junit mockito

我正试图让verifyMockito 的方法起作用.我有以下测试:

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

此测试应该失败,但它会通过.有人知道为什么吗?我使用Mockito错了吗?

更新

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

private interface Bar
{
    public void foo();
}

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

rle*_*ndi 6

好吧,你应该小心:默认情况下,你不能模拟最终的类(比如String).这是框架的已知限制.

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

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)
         ...
Run Code Online (Sandbox Code Playgroud)

所以我想你的项目可能会有一些小的配置问题.您使用的是哪个IDE?您有哪个版本的Mockito?你如何运行测试?

您可以尝试使用一些额外的工具包,如PowerMock,它可以帮助您克服这一限制.这个框架可以很容易地与Mockito结合使用.

另一方面,它Stringjava.lang软件包的一部分,我假设VM有一些额外的安全验证(尽管不确定).我不相信你可以模拟(即操纵字节码)这样的类(例如,如果你试图在java.*包中放入一些东西,你会得到一个编译错误).但这只是我身边的一个假设.