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();
}

好吧,您应该小心这一点:默认情况下,您不能模拟最终类(如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)
         ...

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

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

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

相关内容

  • 没有找到相关文章

最新更新