簡體   English   中英

Pitest JUnit5 突變失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM