首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Mockito静态模拟运行Pitest?

如何使用Mockito静态模拟运行Pitest?
EN

Stack Overflow用户
提问于 2021-10-05 18:48:52
回答 1查看 376关注 0票数 0

我正在进行的一个项目涉及将我们的代码库更新为JUnit 5,我们的许多测试类以前都使用PowerMockito进行静态模拟。由于PowerMockito目前不支持JUnit 5,所以我们更新了Mockito依赖项,转而使用JUnit的静态模拟。在大多数情况下,这在运行单元测试时是有效的,但在运行测试时会出现问题,因为运行这些测试是为了获得变异覆盖率。

尽管测试运行并通过了mvn testmvn verify的测试,但是pitest还是会给出错误:

代码语言:javascript
复制
[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静态模拟的测试。

测试通常如下所示:

样本静态模拟测试

代码语言:javascript
复制
@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));
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-06 08:11:40

皮特斯特目前不支持静态嘲弄。我将看看是否可以支持它,但它可能是一个复杂的任务。对Power运动会的支持需要黑暗魔法(重写它使用的字节码操作库的字节码),而且总是很脆弱,很容易被新的Powermock版本破坏。

一个更好的长期解决方案是从测试套件中移除静态模拟的需求。虽然它确实有一些用例,但对于设计问题,它通常是一个危险的标志。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69455779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档