@Before public void before() {
when(foo.foo()).thenReturn("ok");
// it is better to configure the stubbing to be lenient:
// lenient().when(foo.foo()).thenReturn("ok");
// or the entire mock to be lenient:
// foo = mock(Foo.class, withSettings().lenient());
}
@Test public void test1() {
foo.foo();
}
@Test public void test2() {
foo.foo();
}
@Test public void test3() {
bar.bar();
}
4条答案
按热度按时间ia2d9nvy1#
例如,在从Mockito 1迁移到Mockito 2(后者引入了严格的存根)时,如果您需要在短时间内完成迁移,这将非常有用。
f5emj3cl2#
我刚刚遇到了一个不寻常的有效用法。我们做了一个代码更改,默认情况下禁用了一个功能(在未来的版本中将其完全删除之前)。我们需要测试禁用功能是否真的有效,因此我们需要将一些标志模拟为false。然而,我们还需要模拟一些其他值,因为如果禁用该功能的代码位(测试该标志)不知何故被破坏了,该特性的默认设置将导致它无论如何都不做任何事情,因此我们无法观察到标志的故障。
总结如下:在成功的情况下,我们会得到UnnecessaryStubbingException,但如果没有它,失败的情况实际上不会失败,因此我们将这些特定的模拟标记为宽松的。
pqwbnv8z3#
引入严格存根是为了检测不必要的存根,并编写一个更干净的测试。如果你遇到异常,重点应该放在改进测试用例上,而不是绕过严格存根检查。
jq6vz3qz4#
在
@BeforeEach
块中使用lenient
是一个很好的例子。如果你在几乎所有的测试用例中都使用存根,那么在每个测试用例之前创建存根是有意义的。如果你有任何不使用存根的测试,你需要使用
lenient
来防止严格的存根抛出错误。这是mockito文档中使用的例子: