我有一个私有方法,它被多个进程使用,我正在为一个公共方法编写单元测试,在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不允许我们验证私有方法。
1条答案
按热度按时间9udxz4iz1#
1.你不应该关心私有方法的行为,因为单元测试只关心公共方法的输入/输出。
1.如果你真的需要实现这一点,你可以尝试创建一个
Mango
对象的spy(Mango mango = Mockito.spy(Mango.class)
),并检查setter是否按预期被调用:verify(mango).setAmount(100)
和verify(mango).setAmount(50)