首页 > 解决方案 > 没有发现突变 PitTest Maven

问题描述

第一次尝试使用pitTest和maven,

使用 IntelliJ 理念。

对于以下 pom.xml 片段:

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <groupId>org.pitest</groupId>
                <artifactId>pitest-maven</artifactId>
                <version>1.4.9</version>
                <configuration>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.pitest</groupId>
                        <artifactId>pitest-junit5-plugin</artifactId>
                        <version>0.12</version>
                    </dependency>
                </dependencies>

            </plugin>
        </plugins>

我得到以下堆栈跟踪:

[INFO] 
[INFO] --- pitest-maven:1.4.9:mutationCoverage (default-cli) @ Junit_Test ---
[INFO] Found plugin : Default csv report plugin
[INFO] Found plugin : Default xml report plugin
[INFO] Found plugin : Default html report plugin
[INFO] Found plugin : Static initializer code detector plugin
[INFO] Found plugin : Static initializer filter plugin
[INFO] Found plugin : Excluded annotations plugin
[INFO] Found plugin : Inlined finally block filter plugin
[INFO] Found plugin : Try with resources filter
[INFO] Found plugin : Implicit null check filter
[INFO] Found plugin : For each loop filter
[INFO] Found plugin : Logging calls filter
[INFO] Found plugin : Infinite for loop filter
[INFO] Found plugin : Long running iterator loop filter
[INFO] Found plugin : For loop counter filter
[INFO] Found plugin : Kotlin junk mutations filter
[INFO] Found plugin : Max mutations per class limit
[INFO] Found plugin : Equals shortcut equivalent mutant filter
[INFO] Found plugin : Trivial return vals equivalence filter
[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\Lenovo\IdeaProjects\Junit_Test_2\target\classes
[INFO] Defaulting target classes to match packages in build directory
4:57:36 AM PIT >> INFO : ---------------------------------------------------------------------------
4:57:36 AM PIT >> INFO : Enabled (+) and disabled (-) features.
4:57:36 AM PIT >> INFO : -----------------------------------------
4:57:36 AM PIT >> INFO : +FFBLOCK        Filters mutations in code duplicated by finally block inlining
4:57:36 AM PIT >> INFO : +FSTATI         Filters mutations in static initializers and code called only from them
4:57:36 AM PIT >> INFO : +FSEQUIVEQUALS  Filters equivalent mutations that affect only performance in short cutting equals methods
4:57:36 AM PIT >> INFO : +FFEACH         Filters mutations in compiler generated code that implements for each loops
4:57:36 AM PIT >> INFO : +FINFINC        Filters mutations to increments that may cause infinite loops
4:57:36 AM PIT >> INFO : +FFLOOP         Filters any mutations to increments in for loops as they may cause timeouts
4:57:36 AM PIT >> INFO : +FRETEQUIV      Filters return vals mutants with bytecode equivalent to the unmutated class
4:57:36 AM PIT >> INFO : +FINULL         Filters mutations in compiler generated code that checks for null by calling getClass
4:57:36 AM PIT >> INFO : +FTRYWR         Filters mutations in code generated for try with resources statements
4:57:36 AM PIT >> INFO : +FKOTLIN        Filters out junk mutations in bytecode created by compiler for kotlin language features
4:57:36 AM PIT >> INFO : +FSTATINIT      Filters mutations in static initializers and code called only from them
4:57:36 AM PIT >> INFO : +FLOGCALL       Filters mutations in code that makes calls to logging frameworks
4:57:36 AM PIT >> INFO : +FINFIT         Filters mutations that may cause infinite loops by removing calls to iterator.next
4:57:36 AM PIT >> INFO : +FANN           Filters mutations in classes and methods with matching annotations of class or runtime retention
4:57:36 AM PIT >> INFO :   [annotation]    Annotation to avoid (full package name not required)
4:57:36 AM PIT >> INFO : -CLASSLIMIT     Limits the maximum number of mutations per class
4:57:36 AM PIT >> INFO :   [limit]         Integer value for maximum mutations to create per class
4:57:36 AM PIT >> INFO : -EXPORT         Exports mutants bytecode and other details to disk
4:57:36 AM PIT >> INFO : ---------------------------------------------------------------------------
4:57:36 AM PIT >> FINE : Running report with ReportOptions [targetClasses=[.*], excludedMethods=[], excludedClasses=[], excludedTestClasses=[], codePaths=[C:\Users\Lenovo\IdeaProjects\Junit_Test_2\target\classes], reportDir=C:\Users\Lenovo\IdeaProjects\Junit_Test_2\target\pit-reports, historyInputLocation=null, historyOutputLocation=null, sourceDirs=[C:\Users\Lenovo\IdeaProjects\Junit_Test_2\src\main\java, C:\Users\Lenovo\IdeaProjects\Junit_Test_2\src\test\java], classPathElements=[C:\Users\Lenovo\IdeaProjects\Junit_Test_2\target\test-classes, C:\Users\Lenovo\IdeaProjects\Junit_Test_2\target\classes, C:\Users\Lenovo\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.4.2\junit-jupiter-api-5.4.2.jar, C:\Users\Lenovo\.m2\repository\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar, C:\Users\Lenovo\.m2\repository\org\opentest4j\opentest4j\1.1.1\opentest4j-1.1.1.jar, C:\Users\Lenovo\.m2\repository\org\junit\platform\junit-platform-commons\1.4.2\junit-platform-commons-1.4.2.jar, C:\Users\Lenovo\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.4.2\junit-jupiter-engine-5.4.2.jar, C:\Users\Lenovo\.m2\repository\org\junit\platform\junit-platform-engine\1.4.2\junit-platform-engine-1.4.2.jar, C:\Users\Lenovo\.m2\repository\org\pitest\pitest-junit5-plugin\0.12\pitest-junit5-plugin-0.12.jar, C:\Users\Lenovo\.m2\repository\org\pitest\pitest\1.4.9\pitest-1.4.9.jar], mutators=[], features=[], dependencyAnalysisMaxDistance=-1, jvmArgs=[-Djava.awt.headless=true], numberOfThreads=1, timeoutFactor=1.25, timeoutConstant=3000, targetTests=[], 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]
4:57:36 AM PIT >> FINE : System class path is C:\Program Files\JetBrains\IntelliJ IDEA Educational Edition 2020.2.1\plugins\maven\lib\maven3\boot\plexus-classworlds-2.6.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA Educational Edition 2020.2.1\plugins\maven\lib\maven3\boot\plexus-classworlds.license;C:\Program Files\JetBrains\IntelliJ IDEA Educational Edition 2020.2.1\lib\idea_rt.jar
4:57:36 AM PIT >> FINE : Maximum available memory is 1776 mb
4:57:36 AM PIT >> FINE : MINION : Installing PIT agent
4:57:36 AM PIT >> INFO : Sending 0 test classes to minion
4:57:36 AM PIT >> INFO : Sent tests to minion
4:57:36 AM PIT >> FINE : Coverage generator Minion exited ok
4:57:36 AM PIT >> INFO : Calculated coverage in 0 seconds.
4:57:36 AM PIT >> FINE : Used memory after coverage calculation 42 mb
4:57:36 AM PIT >> FINE : Free Memory after coverage calculation 110 mb
4:57:36 AM PIT >> INFO : Created  0 mutation test units

带有以下错误消息:

Failed to execute goal org.pitest:pitest-maven:1.4.9:mutationCoverage (default-cli) on project Junit_Test: Execution default-cli of goal org.pitest:pitest-maven:1.4.9:mutationCoverage failed: No mutations found. This probably means there is an issue with either the supplied classpath or filters.

我努力了:

-> 添加 targetClasses 和 targetTests 配置参数(堆栈跟踪中源目录中的参数)

-> 添加 .* 作为 targetClasses 和 targetTests

两者都给出相同的错误。

类的 .java 文件位于 project_dir/src/main/java 测试类的 .java 文件位于 project_dir/src/test/java

标签: javamavenjunitmutation-testingpittesting

解决方案


推荐阅读