【发布时间】:2021-11-26 01:08:01
【问题描述】:
我正在进行的一个项目涉及将我们的代码库更新到 JUnit 5。我们的一些测试类以前一直在使用 PowerMockito 进行静态模拟。由于 PowerMockito 目前不支持 JUnit 5,我们更新了 Mockito 依赖项并切换到使用 Mockito 的静态模拟。这在运行单元测试时大部分都有效,但在使用 ptest 运行测试以获得突变覆盖率时会出现问题。
尽管使用mvn test 或mvn verify 可以正常运行并通过测试,但pitest 会给出错误:
[ERROR] Failed to execute goal org.pitest:pitest-maven:1.5.2:mutationCoverage (default-cli) on project <PROJECT>: Execution default-cli of goal org.pitest:pitest-maven:1.5.2:mutationCoverage failed: 9 tests did not pass without mutation when calculating line coverage. Mutation testing requires a green suite.
提到的 9 个测试是唯一使用 Mockito 静态模拟的测试。
测试通常如下所示:
静态模拟测试示例
@ExtendWith(MockitoExtension.class)
public class SampleTest {
@Test
public void sampleTestWithMocking() {
String param = "test";
String expected = "value";
MockedStatic<MyClass> mockStaticMyClass = Mockito.mockStatic(MyClass.class);
mockStaticMyClass.when(() -> MyClass.myStaticMethod(param)).thenReturn(expected);
assertEquals(expected, MyClass.myStaticMethod(param));
}
}
【问题讨论】: