mockito : 如何解开一种方法?

2022-08-31 19:51:21

我有一个JUnit类,它有不同的方法来执行不同的测试。

我使用Mockito在真实实例上创建一个间谍,然后覆盖一些与我执行的实际测试无关的方法。

有没有办法,只是为了在我之后清理,以防在我的测试之后运行的其他一些测试也使用相同的实例,并可能执行他们没有要求模拟的模拟方法,以取消模拟方法?

说我有一个名为“wareHouseSpy”的间谍对象

说我覆盖的方法就是SomethingMissing

doReturn(false).when(wareHouseSpy).isSomethingMissing()

什么是正确的方法来取消覆盖,并使间谍恢复正常,即进行下一次调用isSomethingMissing来运行真正的方法?

类似的东西

doReturn(Mockito.RETURN_REAL_METHOD).when(wareHouseSpy).isSomethingSpy()

或者也许

Mockito.unmock(wareHouseSpy)

谁知道呢?我在那个区域找不到任何东西

谢谢!

阿萨夫


答案 1

我认为

Mockito.reset(wareHouseSpy)

会这样做。


答案 2

假设您的大多数测试都使用存根响应。然后你会有一个 setUp() 方法,如下所示:

@Before
public void setUp() {
  wareHouseSpy = spy(realWarehouse);
  doReturn(false).when(wareHouseSpy).isSomethingMissing();
}

现在,假设您要撤消存根响应,并在一个测试中使用实际实现:

@Test
public void isSomethingMissing_useRealImplementation() {
  // Setup
  when(wareHouseSpy.isSomethingMissing()).thenCallRealMethod();

  // Test - Uses real implementation
  boolean result = wareHouseSpy.isSomethingMissing();
}