当前位置: 首页 > 知识库问答 >
问题:

Mockito-如何验证模拟从未被调用

柯昆杰
2023-03-14

我正在寻找一种方法来验证Mockito,在测试期间没有与给定的模拟进行任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。

我真正想要实现的是:在测试中验证,控制台上没有打印任何get。jUnit的总体思路如下:

private PrintStream systemOut;

@Before
public void setUp() {
    // spy on System.out
    systemOut = spy(System.out);
}

@After
public void tearDown() {
    verify(systemOut, never());  // <-- that doesn't work, just shows the intention
}

一个PrintStream有很多方法,我真的不想用单独的verify来验证每一个方法,对于系统也是如此。错误。。。

所以我希望,如果有一个简单的解决方案,鉴于我有一个良好的测试覆盖率,我可以迫使软件工程师(和我自己)删除他们(我)的调试代码,比如系统。出来println(“断点#1”) e.printStacktrace() 提交更改之前。


共有3个答案

徐唯
2023-03-14

由于原来的正确答案验证零交互已被弃用,请改用验证零交互

import org.junit.jupiter.api.Test;

import static org.mockito.Mockito.*;

public class SOExample {

    @Test
    public void test() {
        Object mock = mock(Object.class);
        verifyNoInteractions(mock);
    }
}
谷梁宜
2023-03-14
verifyZeroInteractions(systemOut);

正如评论中提到的,这对间谍不起作用。

有关大致相同但更完整的答案,请参阅gontard对该问题的回答。

卞云瀚
2023-03-14

使用这个:

import static org.mockito.Mockito.verifyZeroInteractions;

// ...

private PrintStream backup = System.out;

@Before
public void setUp() {
    System.setOut(mock(PrintStream.class));
}

@After
public void tearDown() {
    verifyZeroInteractions(System.out);
    System.setOut(backup);
}
 类似资料:
  • 问题内容: 我正在寻找一种与Mockito进行验证的方法,即在测试过程中与给定的模拟没有任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,没有任何内容打印到控制台上。jUnit的总体思路如下: A 有很多方法,我真的不想用单独的验证方法来验证每个方法,而… 因此,我希望,如果有一个简单的解决方案,鉴于我具有良好的测试覆盖

  • 问题内容: 似乎模拟仅验证模拟对象的方法是否被调用,并且模拟对象始终具有类似以下内容的东西 但是我可以创建一个模拟对象并定义 然后验证另一个对象的方法是否被调用吗? 这是我想做的事情:我定义了一个模拟环境,无论发生什么情况都返回一个响应。但是然后我想验证在不同情况下调用anotherObj的不同方法。 怎么做? 问题答案: 您可以为此使用Mockito Spy。如果您设置为间谍,则可以验证该对象上

  • 问题内容: 在Mockito中,是否有办法验证我创建的任何模拟游戏中都没有交互? 例如: 有这种方法吗? 问题答案: 由于verifyNoMoreInteractions带有对象数组,因此我们必须找到一种方法来获取所有创建的模拟。 您可以创建此类 然后在测试中使用它: 或带有注释: 它可以工作,但是增加了对嘲笑内部的依赖。

  • 如何验证一个模拟对象根本没有被调用?我正在尝试使用Mockito测试一个接口方法的空实现。

  • 我试图编写一个单元测试,它需要确认是否调用了一个方法。我使用的是JUnit、Mockito和PowerMock。 因此,在这里,我的测试系统是。我正在运行这个测试: 这个例子只是实际代码的一个例子.... 我想做的是不可能的吗?还是我走错路了? 谢谢大家:)

  • 但这将返回以下错误: org.mockito.exceptions.misusing.NotaMockException: 传递给verify()的参数类型为$proxy4,不是mock!