[英]Pitest JUnit5 mutation fails
我有以下問題:
我必須將一些測試從 JUnit 4 升級到 JUnit 5,並且還要將 Pitest 的版本從 1.4.0 更新到 1.6.0。
通過對 JUnit 4 和 Pitest 1.4.0 的測試,一切正常。 將測試遷移到 JUnit 5 后,經過一些修改,測試通過了,但是當我進行 ptest 測試時,使用 pojo 驗證的測試失敗。
測試示例:
@BeforeEach
public void setup() {
pojoClasses = PojoClassFactory.getPojoClassesRecursively(POJO_PACKAGE, pojoClass -> pojoClass.getName().endsWith("Dto"));
pojoValidator = new PojoValidator();
pojoValidator.addRule(new NoPublicFieldsRule());
pojoValidator.addRule(new NoPrimitivesRule());
pojoValidator.addRule(new NoStaticExceptFinalRule());
pojoValidator.addRule(new GetterMustExistRule());
pojoValidator.addRule(new SetterMustExistRule());
pojoValidator.addTester(new DefaultValuesNullTester());
pojoValidator.addTester(new SetterTester());
pojoValidator.addTester(new GetterTester());
}
@Test
public void testPojoStructureAndBehavior() {
for (PojoClass pojoClass : pojoClasses) {
pojoValidator.runValidation(pojoClass);
}
}
我得到的錯誤是:
java.lang.AssertionError: Primitive fields (byte, short, int, long, float, double, boolean, char) not allowed [PojoFieldImpl [field=private static transient int something.something.something.packagename.classname.$$pitCoverageProbeSize, fieldGetter=null, fieldSetter=null]]
有任何想法嗎?
從 Pitest 1.4.7 開始,覆蓋系統 Pitest 使用為每個類引入一個合成字段來保存覆蓋探針。 這是一種常見的方法,也被 jacoco 等覆蓋系統使用。
大多數基於反射的庫會過濾掉合成字段。 您正在運行的代碼似乎表現不佳。 如果是您自己的代碼,則需要更新它以忽略合成字段。 如果沒有,您將需要聯系庫維護者。
順便說一句,pitest 的最新版本是 1.8.0。 我建議升級到這個而不是 1.6.0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.