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

是否需要在使用Mockito模拟的对象上定义doNothing()/when()

倪培
2023-03-14

我正在使用JUnit5和Mockito为一个类Main编写单元测试。java

依赖类ExternalApi。java被注入到Main中。java

这是我的main测试。java

@ExtendWith(MockitoExtension.class)
public class MainTest {
    @InjectMocks
    Main main;

    @Mock
    ExternalApi externalApi;

    @Test
    void testAbcMethod() {

    }
}

Main.java中的abc()方法调用extranalApi.do某物()执行一些操作。

我不想在测试中调用这个原始的externalApi方法。我需要定义

doNothing().when(externalApi).when(doSomething());

或者它只是够嘲笑ExtranalApi

当我们不定义调用模拟对象的方法时会发生什么?

共有1个答案

有翰海
2023-03-14

什么都没发生。mock已经足够了,因为调用的不是真正的类/方法,而是被模拟的类/方法。

如果窥探了实例,就会触发真正的方法调用。只有到那时,您才会想到使用doNo来抑制方法行为。


@Test
public void whenNotDefineBehaviorOnMock_thenCorrect() {
    List mockList = Mockito.mock(ArrayList.class);
    
   // No behavior defined,
    mockList.add("one");
    Mockito.verify(mockList).add("one");
   // Size is still empty
    assertEquals(0, mockList.size());

   // Behavior defined
    Mockito.when(mockList.size()).thenReturn(100);
    assertEquals(100, mockList.size());
}

 类似资料:
  • 我最近看到了一些Mockito 1.9.5代码,其工作原理如下: 由于myObject不是一个模拟对象,而是一个非模拟类的实例,所以我很惊讶,它编译并运行时没有通过单元测试。我希望我会遇到一个失败,比如“你让我在非模拟对象上设置一个期望值,而我希望只在模拟对象上设定期望值。” 为什么这段代码不会导致测试失败? 更新:添加更多的代码,这是实际复制我感到困惑的行为所必需的。这些例子充分说明了我的问题。

  • 问题内容: 我有一个使用Mockito和Spring Test框架的非常简单的测试用例。当我做 我得到这个例外。 我尝试使用不同的方法,但继续收到此错误消息。我在Mockito中使用Spring 3.1.0.RELEASE。请分享并指导我正确的方向。 问题答案: 您需要先创建pcUserService的MOCK,然后使用该模拟。

  • 有许多方法可以使用mockito初始化模拟对象。其中什么是最好的方法? 1. 建议我有没有比这些更好的方法...

  • 我最终得到。 我是否可以模拟并且在测试时仍然得到消息错误?

  • 我一直在试图理解嘲笑是如何工作的。我读过各种回应,似乎有一个相互矛盾的论点,Mockito是否在内部使用反射。 这里,它清楚地说明了mockito不使用反射:https://stackoverflow.com/questions/15970810/using-mockito-to-mock-methods-by-reflection#:~:text=mockito%20is%20a%20realt

  • 问题内容: 有很多方法可以使用MockIto初始化模拟对象。其中最好的方法是什么? 1。 2。 [编辑] 3。 如果有其他方法可以建议我… 问题答案: 对于模拟初始化,使用或是严格等效的解决方案。从MockitoJUnitRunner的javadoc中: 当你已经在测试用例上配置了特定的运行器时,可以使用第一个解决方案(带有)。 第二个解决方案(带有)更经典,也是我的最爱。代码更简单。使用转轮提供