我正在进行的一个项目涉及将我们的代码库更新为JUnit 5,我们的许多测试类以前都使用PowerMockito进行静态模拟。由于PowerMockito目前不支持JUnit 5,所以我们更新了Mockito依赖项,转而使用JUnit的静态模拟。在大多数情况下,这在运行单元测试时是有效的,但在运行测试时会出现问题,因为运行这些测试是为了获得变异覆盖率。
尽管测试运行并通过了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));
}
}发布于 2021-10-06 08:11:40
皮特斯特目前不支持静态嘲弄。我将看看是否可以支持它,但它可能是一个复杂的任务。对Power运动会的支持需要黑暗魔法(重写它使用的字节码操作库的字节码),而且总是很脆弱,很容易被新的Powermock版本破坏。
一个更好的长期解决方案是从测试套件中移除静态模拟的需求。虽然它确实有一些用例,但对于设计问题,它通常是一个危险的标志。
https://stackoverflow.com/questions/69455779
复制相似问题