java - 如何将 Mock 设置为具有默认行为并可以在某些测试中覆盖它

标签 java mockito

我想模拟一个依赖项并在大多数测试用例中返回一个默认值,因为它们中的大多数不应该关心返回的值但是有一些特定的情况就像我想测试依赖项返回一些奇怪的值或者只是扔。所以我以这种方式对其进行建模。大多数情况下,它应该返回一个漂亮且有效的值。

默认为所有测试类返回 20L 的测试设置。

Dependency dependency = Mockito.mock(Dependency.class);
when(dependency.returnSomeVal()).thenReturn(20L);

在特定的测试用例类中,我想覆盖如下行为:

when(dependency.returnSomeVal()).thenThrow(); //failure cases
when(dependency.returnSomeVal()).thenReturn(Weird_Val); //failure cases

但是我没有找到一个好的解决方案来覆盖现有的行为?有什么想法吗?

最佳答案

您可以重置模拟并添加行为。在测试中,做

Mockito.reset(dependency);
when(dependency.returnSomeVal()).thenThrow(); //failure cases
when(dependency.returnSomeVal()).thenReturn(Weird_Val); //failure cases

不过,重置将删除此类上的所有模拟行为。如果您只想重新模拟某些方法,则必须从头开始创建模拟。

关于java - 如何将 Mock 设置为具有默认行为并可以在某些测试中覆盖它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62398273/

相关文章:

java - 如何从未在 Java 中实例化的类中调用方法?

java - 我在运行时创建的 Swing 组件未显示在 JPanel 中

java - 如何在不初始化类的情况下模拟内部成员

java - Mockito - 当调用 void 方法时设置一个标志

mockito - 如何使用 PowerMockito 验证调用了 super 方法

java - 解密时出现 javax.crypto.IllegalBlockSizeException 错误

java - 用面板填充内容 Pane

java - android.content.contextwrapper.getResources 中的空指针异常

java - PowerMock whenNew 没有@PrepareForTest?

java - Robolectric + Mockito - "Wanted but not invoked"