【发布时间】:2021-05-21 20:27:40
【问题描述】:
我有一个单元测试类,我的测试单元依赖于另一个类。使用 Mockito 模拟依赖项,然后使用 JUnit 的 @BeforeEach 注释设置在每个单元测试之前运行的通用存根。见下面的伪代码。
@ExtendWith(MockitoExtension.class)
public class FooFactoryTest {
@Mock
private BarDependency barDependency;
@InjectMocks
private FooFactory unitUnderTest;
@BeforeEach
public void setup() {
when(barDependency.leftBar(any())).thenReturn(new Bar());
when(barDependency.rightBar(any())).thenReturn(new Bar());
}
... many tests ...
此设置非常适合我的 10 个单元测试中的 9 个。不幸的是,我的一项测试因以下错误而失败:
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at nl.devillers.mockito.FooFactoryTest.setup(FooFactoryTest.java:69)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
现在,我了解了错误及其引发的原因,因为在该特定测试中,我的待测单元很早就短路了,并且没有击中所有已设置的存根。我知道 Mockito 中有一个 lenient 选项,但这会禁用对整个类/项目的检查。
我的问题是:如何为一个特定的单元测试禁用这种严格性?
再次重申:我确实不想在班级或项目级别禁用严格性,因为我认为这是有价值的检查。我也确实不想将我的设置代码移动到需要存根的测试,因为那样我必须复制设置代码九次。在这种情况下,我只想禁用或跳过此特定测试的检查。
【问题讨论】:
标签: java unit-testing junit mockito junit-jupiter