java - Mockito 验证未失败

标签 java junit 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)。 This is a known limitation框架。

您的示例对我来说失败并显示正确的错误消息:

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.* 包中,则会出现编译错误)。但这只是我的假设。

关于java - Mockito 验证未失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553606/

相关文章:

java - 二维数组/矩阵的长度

java - MySQL 中电话号码的最佳数据类型是什么,Java 类型映射应该是什么?

java - 单元测试 Google App Engine 1.6.4 中出现非法 blobKey 错误

java - 访问 Mockito/Powermock 中的匿名 Runnable 实例

java - Selenium WebDriver : wait for element to be present when locating with WebDriver. findElement 是不可能的

java - 如何解决 "cannot find symbol"包中的 Timeout.seconds() 方法生成的 "org. junit.rules.Timeout"错误?

java - junit 错误 - AssertionFailedError

java - Maven 不会重写 JUnit/Mockito 的 context.xml 上的属性

android - 返回 void 返回类型的模拟 stub

java - 如何将 long 传递给 spring PUT Controller