java JUnit用于测试对象如何在过程中更改沿着最终Assert

igsr9ssn  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(84)

我有一个私有方法,它被多个进程使用,我正在为一个公共方法编写单元测试,在pitest期间,一个删除对一行调用的突变仍然存在,所以为了修复它(不告诉test忽略该突变),我想检查对象是否在进程中间更新了某个值,并在进程结束时更新了另一个值。有可能吗?

public class MyClass {

    public List<Mango> publicMethod() {
    List<Mango> mangos = apiCall();
        privateMethod1(mangos);
        privateMethod2(mangos);
        return mangos;
    }

    private void privateMethod1(List<Mango> mangos) {
        mangos.forEach(mango -> {
            if(mango.getName("indigenous") {
                mango.setAmount(100);
                mango.setQuantity(10);
            }
        });
    }

     private void privateMethod2(List<Mango> mangos) {
        mangos.forEach(mango -> {
            if(mango.getName("indigenous") {
                mango.setAmount(50);
            }
        }
    });   
}

在publicMethod()的单元测试中,删除了对mango.setAmount(100)的调用;在privateMethod 2中再次更新时仍然存在,但privateMethod 1被多个进程使用,因此不应更新。在实际场景中,这些方法中会发生多个事情,但为了解释问题,我对对象使用简单的set方法。setAmount(100);在实际代码中,有一个私有方法,它将更新对象的某些值。
为了让pitest不忽略这一行,我尝试使用Mockito.verify()来检查私有方法是否被调用了两次,但是mokito不允许我们验证私有方法。

9udxz4iz

9udxz4iz1#

1.你不应该关心私有方法的行为,因为单元测试只关心公共方法的输入/输出。
1.如果你真的需要实现这一点,你可以尝试创建一个Mango对象的spy(Mango mango = Mockito.spy(Mango.class)),并检查setter是否按预期被调用:verify(mango).setAmount(100)verify(mango).setAmount(50)

相关问题