Запуск pitest с maven не может найти или загрузить org.pitest.coverage.execute.CoverageMinion

Я узнаю о тестировании мутаций с помощью pitest и сталкиваюсь с проблемами, когда пытаюсь запустить его с помощью maven. В моем pom.xml у меня есть зависимость pitest:

<dependency>
    <groupId>org.pitest</groupId>
    <artifactId>pitest</artifactId>
    <version>1.5.2</version>
</dependency>

У меня также есть плагин:

<plugin>
    <groupId>org.pitest</groupId>
    <artifactId>pitest-maven</artifactId>
    <version>1.5.2</version>
    <executions>
        <execution>
            <id>pit-report</id>
            <!-- optional, this example attached the goal into mvn test phase -->
            <phase>test</phase>
            <goals>
                <goal>mutationCoverage</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.pitest</groupId>
            <artifactId>pitest-junit5-plugin</artifactId>
            <version>0.12</version>
        </dependency>
    </dependencies>
    <configuration>
        <targetClasses>
            <param>mypackage.myClass*</param>
       </targetClasses>
       <targetTests>
           <param>mypackage*</param>
       </targetTests>
    </configuration>
</plugin>

Однако, когда я запускаю mvnw.cmd verify test -Dverbose, он сообщает, что нашел механизм мутации, Junit 5 и плагин Junit, добавляет плагин junit 5 в путь к классам, добавляет pitest в путь к классам, а затем не может найти и загрузить основной класс org.pitest. coverage.execute.CoverageMinion и не тестирует мутации:

[INFO] --- pitest-maven:1.5.2:mutationCoverage (pit-report) @ myProject ---
[...]
[INFO] Found plugin : Mutant export plugin
[INFO] Found shared classpath plugin : Default mutation engine
[INFO] Found shared classpath plugin : JUnit 5 test framework support
[INFO] Found shared classpath plugin : JUnit plugin
[INFO] Found shared classpath plugin : TestNG plugin
[INFO] Adding org.pitest:pitest-junit5-plugin to SUT classpath
[INFO] Adding org.pitest:pitest to SUT classpath
[INFO] Mutating from C:\Users\myUser\myWorkspace\myProject\target\classes
[...]
13:20:27 PIT >> FINE : Running report with ReportOptions [targetClasses=[mypackage.myClass*], excludedMethods=[], excludedClasses=[], excludedTestClasses=[], codePaths=[C:\Users\myUser\myWorkspace\myProject\target\classes], reportDir=C:\Users\myUser\myWorkspace\myProject\target\pit-reports, historyInputLocation=null, historyOutputLocation=null, sourceDirs=[C:\Users\myUser\myWorkspace\myProject\src\main\java, C:\Users\myUser\myWorkspace\myProject\src\test\java], classPathElements=[C:\Users\myUser\myWorkspace\myProject\target\test-classes, C:\Users\myUser\myWorkspace\myProject\target\classes, C:\Users\myUser\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar, C:\Users\myUser\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar, C:\Users\myUser\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar, C:\Users\myUser\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar, C:\Users\myUser\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar, C:\Users\myUser\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar, C:\Users\myUser\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar, C:\Users\myUser\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar, C:\Users\myUser\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar, C:\Users\myUser\.m2\repository\org\pitest\pitest\1.5.2\pitest-1.5.2.jar, C:\Users\myUser\.m2\repository\org\pitest\pitest-junit5-plugin\0.12\pitest-junit5-plugin-0.12.jar, C:\Users\myUser\.m2\repository\org\pitest\pitest\1.5.2\pitest-1.5.2.jar], mutators=[], features=[], dependencyAnalysisMaxDistance=-1, jvmArgs=[-Djava.awt.headless=true], numberOfThreads=1, timeoutFactor=1.25, timeoutConstant=3000, targetTests=[^myPackage.*$], loggingClasses=[], maxMutationsPerClass=0, verbose=true, failWhenNoMutations=true, outputs=[HTML], groupConfig=TestGroupConfig [excludedGroups=[], includedGroups=[]], fullMutationMatrix=false, mutationUnitSize=0, shouldCreateTimestampedReports=true, detectInlinedCode=true, exportLineCoverage=false, mutationThreshold=0, coverageThreshold=0, mutationEngine=gregor, javaExecutable=null, includeLaunchClasspath=true, properties={}, maxSurvivors=0, excludedRunners=[], includedTestMethods=[], testPlugin=junit5, useClasspathJar=false, skipFailingTests=false]
13:20:27 PIT >> FINE : System class path is C:\Users\myUser\myWorkspace\myProject\.mvn\wrapper\maven-wrapper.jar
13:20:27 PIT >> FINE : Maximum available memory is 1796 mb
13:20:27 PIT >> FINE : MINION : Installing PIT agent

13:20:27 PIT >> INFO : MINION : Error: Could not find or load main class org.pitest.coverage.execute.CoverageMinion

Первоначально я думал, что это будет проблема с путем к классам, учитывая сообщение об ошибке, но приведенные выше журналы показывают, что используемый путь к классам включает соответствующие файлы jar и пути. Что еще я могу делать неправильно? Заранее спасибо.


person JustAnotherDeveloper    schedule 07.12.2020    source источник
comment
Вам не нужна зависимость от pitest. Я не уверен, почему это может вызвать проблему, которую вы видите, но что произойдет, если вы удалите ее?   -  person henry    schedule 08.12.2020
comment
@henry В настоящее время я нахожусь вдали от машины, на которой у меня есть этот проект, но я попробую завтра, когда вернусь, и соответствующим образом обновлю вопрос, решит ли это проблему или нет. Спасибо за предложение.   -  person JustAnotherDeveloper    schedule 08.12.2020
comment
@henry Я удалил зависимость, но ошибка все равно возникла. Однако проверка переменной окружения classpath показала, что, вопреки моему убеждению, она была установлена. Отключение решило проблему. Пора убить мутантов. Еще раз спасибо за вашу помощь.   -  person JustAnotherDeveloper    schedule 09.12.2020


Ответы (1)


Для тех, кто столкнулся с той же проблемой, моя ошибка заключалась в том, что я предположил, что путь к классам правильный, но это не так. Кажется, журналы не учитывают значение переменной окружения classpath, и на моем компьютере эта переменная имела значение, когда ее не следует устанавливать. Отключение его с помощью set classpath= решило проблемы с путем к классам, которые вызывали ошибку с pitest.

person JustAnotherDeveloper    schedule 09.12.2020