ปลั๊กอินให้ความสามารถในการทดสอบการกลายพันธุ์และคำนวณการครอบคลุมการกลายพันธุ์ของโครงการที่ใช้ Gradle ด้วย PIT
เพิ่ม Gradle-Pitest-plugin ลงในการกำหนด plugins ในไฟล์ build.gradle ของคุณ:
plugins {
id ' java ' // or 'java-library' - depending on your needs
id ' info.solidsoft.pitest ' version ' 1.15.0 '
}plugins {
id( " java " ) // or "java-library" - depending on your needs
id( " info.solidsoft.pitest " ) version " 1.15.0 "
}โทรไปที่ Gradle ด้วยงานที่น่าเชื่อถือ:
gradle pitest
หลังจากการวัดรายงานที่สร้างโดย PIT จะถูกวางไว้ใน ${PROJECT_DIR}/build/reports/pitest ไดเรกทอรี
เลือกให้ขึ้นอยู่กับการสร้าง:
build . dependsOn ' pitest 'tasks.build {
dependsOn( " pitest " )
} โปรดทราบว่าเมื่อทำ pitest ขึ้นอยู่กับงานอื่นมันจะต้องถูกอ้างถึงด้วยชื่อ มิฉะนั้น Gradle จะแก้ไข pitest การกำหนดค่าและไม่ใช่งาน
" plugins ทาง" มีข้อ จำกัด บางประการ เนื่องจากพื้นที่เก็บข้อมูลหลักสำหรับปลั๊กอินเป็นที่เก็บกลาง (aka Maven Central) มันเป็นไปได้ที่จะเพิ่มปลั๊กอินลงในโครงการของคุณโดยใช้ "The Generic Way":
buildscript {
repositories {
mavenCentral()
// Needed only for SNAPSHOT versions
// maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
classpath ' info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.15.0 '
}
}buildscript {
repositories {
mavenCentral()
// Needed only for SNAPSHOT versions
// maven {
// url = uri("https://oss.sonatype.org/content/repositories/snapshots/")
// }
}
dependencies {
classpath( " info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.15.0 " )
}
}ใช้ปลั๊กอิน:
apply plugin : ' java ' // or 'java-library' - depending on your needs
apply plugin : ' info.solidsoft.pitest ' apply (plugin = " java " ) // or "java-library" - depending on your needs
apply (plugin = " info.solidsoft.pitest " ) ปลั๊กอินที่น่าสงสารไม่จำเป็นต้องกำหนดค่าเพิ่มเติมหากคุณใช้ Junit 4 การปรับแต่งจะทำในบล็อก pitest :
pitest {
targetClasses = [ ' our.base.package.* ' ] // by default "${project.group}.*"
pitestVersion = ' 1.15.0 ' // not needed when a default PIT version should be used
threads = 4
outputFormats = [ ' XML ' , ' HTML ' ]
timestampedReports = false
}การกำหนดค่าสำนวนและพกพามากขึ้น:
pitest {
targetClasses.set( setOf ( " our.base.package.* " )) // by default "${project.group}.*"
pitestVersion.set( " 1.15.0 " ) // not needed when a default PIT version should be used
threads.set( 4 )
outputFormats.set( setOf ( " XML " , " HTML " ))
timestampedReports.set( false )
} เริ่มต้นจากการกำหนดคุณสมบัติแบบง่าย ๆ ของ Gradle 8.1 สามารถใช้สำหรับการกำหนดค่าปลั๊กอิน (แทนวิธี set() ):
pitest {
targetClasses = setOf ( " our.base.package.* " ) // by default "${project.group}.*"
pitestVersion = " 1.15.0 " // not needed when a default PIT version should be used
threads = 4
outputFormats = setOf ( " XML " , " HTML " )
timestampedReports = false
} การกำหนดค่าใน Gradle เป็นรหัส groovy จริงซึ่งทำให้การมอบหมายทั้งหมดใช้งานง่ายมาก ค่าทั้งหมดที่คาดหวังโดยหลุมควรผ่านเป็นประเภทที่สอดคล้องกัน มีความแตกต่างที่สำคัญเพียงอย่างเดียว สำหรับพารามิเตอร์ที่ PIT คาดว่าจะมีรายการที่แยกจากกันของ Coma ในการกำหนดค่า Gradle รายการของสตริงควรใช้ (ดู outputFormats ในตัวอย่างด้านบน)
ตรวจสอบเอกสาร PIT สำหรับรายการพารามิเตอร์บรรทัดคำสั่งที่มีอยู่ทั้งหมด รูปแบบพารามิเตอร์ที่คาดหวังในการกำหนดค่าปลั๊กอินสามารถนำมาจาก PiteStPluginextension
เพื่อให้ชีวิตง่ายขึ้น taskClasspath , mutableCodePaths , sourceDirs , reportDir , verbosity และ pitestVersion จะถูกตั้งค่าโดยปลั๊กอินโดยอัตโนมัติ นอกจากนี้ sourceDirs , reportDir , verbosity และ pitestVersion สามารถถูกแทนที่โดยผู้ใช้
มีพารามิเตอร์บางอย่างเฉพาะสำหรับปลั๊กอิน Gradle:
testSourceSets - กำหนดชุดต้นทางทดสอบซึ่งควรใช้โดย PIT (โดยเริ่มต้น Sourcesets.test แต่อนุญาตให้เพิ่มการทดสอบการรวมที่อยู่ในชุดแหล่งที่แตกต่างกัน)mainSourceSets - กำหนดชุดต้นฉบับหลักซึ่งควรใช้โดย PIT (โดย Sourcesets.Main)mainProcessJvmArgs - อาร์กิวเมนต์ JVM ที่จะใช้เมื่อเปิดกระบวนการหลุมหลัก จดบันทึกว่าหลุมตัวเองเปิดตัวกระบวนการ Java อื่นสำหรับการดำเนินการทดสอบการกลายพันธุ์และมักจะใช้ jvmArgs เพื่อเพิ่มขนาดหน่วยความจำสูงสุด (ดู #7);additionalMutableCodePaths - คลาสเพิ่มเติมเพื่อการกลายพันธุ์ (มีประโยชน์สำหรับการทดสอบการรวมเข้ากับรหัสการผลิตในโมดูลอื่น - ดู #25)useClasspathFile - เปิดใช้งานการส่งผ่าน ClassPath เพิ่มเติมเป็นเนื้อหาไฟล์ (มีประโยชน์สำหรับผู้ใช้ Windows ที่มีองค์ประกอบ ClassPath จำนวนมากปิดใช้งานโดยค่าเริ่มต้น)fileExtensionsToFilter - ให้ความสามารถในการกรองส่วนขยายไฟล์เพิ่มเติมจาก Pit ClassPath (ดู #53)ตัวอย่างเช่น:
pitest {
.. .
testSourceSets = [sourceSets . test, sourceSets . integrationTest]
mainSourceSets = [sourceSets . main, sourceSets . additionalMain]
jvmArgs = [ ' -Xmx1024m ' ]
useClasspathFile = true // useful with bigger projects on Windows
fileExtensionsToFilter . addAll( ' xml ' , ' orbit ' )
}pitest {
.. .
testSourceSets.set( listOf (sourceSets.test.get(), sourceSets.getByName( " integrationTest " )))
mainSourceSets.set( listOf (sourceSets.main.get(), sourceSets.getByName( " additionalMain " )))
jvmArgs.set( listOf ( " -Xmx1024m " ))
useClasspathFile.set( true ) // useful with bigger projects on Windows
fileExtensionsToFilter.addAll( " xml " , " orbit " )
}PIT ดำเนินการทดสอบใน JVM ซึ่งเป็นอิสระจาก JVM ที่ใช้โดย Gradle เพื่อดำเนินการทดสอบ หากการทดสอบของคุณต้องการคุณสมบัติของระบบบางอย่างคุณต้องส่งผ่านไปยังหลุมเพราะปลั๊กอินจะไม่ทำเพื่อคุณ:
test {
systemProperty ' spring.test.constructor.autowire.mode ' , ' all '
}
pitest {
jvmArgs = [ ' -Dspring.test.constructor.autowire.mode=all ' ]
}tasks.test {
systemProperty( " spring.test.constructor.autowire.mode " , " all " )
}
pitest {
jvmArgs.set( listOf ( " -Dspring.test.constructor.autowire.mode=all " ))
} ตามที่รายงานไว้ใน #170 Intellij Idea แสดงคำเตือนเกี่ยวกับการตั้งค่าฟิลด์สุดท้าย (ของการกำหนดค่าขี้เกียจ) ใน build.gradle มันไม่ใช่ปัญหาที่แท้จริงเนื่องจาก Gradle สกัดกั้นการโทรเหล่านั้นและใช้ setter แทน อย่างไรก็ตามคนที่ไม่ชอบที่จะไม่มีคำเตือน (น้อยกว่า) ที่ค่าใช้จ่ายของรหัสที่อ่านน้อยกว่าสามารถใช้ setters แทนเช่น:
testSourceSets . set([sourceSets . test, sourceSets . integrationTest])
mainSourceSets . set([sourceSets . main, sourceSets . additionalMain])
jvmArgs . set([ ' -Xmx1024m ' ])
useClasspathFile . set( true ) // useful with bigger projects on Windows
fileExtensionsToFilter . addAll( ' xml ' , ' orbit ' )Gradle-Pitest-Plugin สามารถใช้ในโครงการหลายโมดูล ควรเพิ่มการพึ่งพา Gradle-Pitest-Plugin ลงในการกำหนดค่า BuildScript ในโครงการรูทในขณะที่ปลั๊กอินจะต้องใช้ในโครงการย่อยทั้งหมดซึ่งควรประมวลผลด้วยหลุม ตัวอย่างตัวอย่างจาก build.gradle ตั้งอยู่สำหรับโครงการรูท:
// in root project configuration
plugins {
id ' info.solidsoft.pitest ' version ' 1.15.0 ' apply false
}
subprojects {
apply plugin : ' java '
apply plugin : ' info.solidsoft.pitest '
pitest {
threads = 4
if (project . name in [ ' module-without-any-test ' ]) {
failWhenNoMutations = false
}
}
} // in root project configuration
plugins {
id( " info.solidsoft.pitest " ) version " 1.15.0 "
}
subprojects {
apply (plugin = " java " )
apply (plugin = " info.solidsoft.pitest " )
pitest {
threads.set( 4 )
if (project.name in setOf ( " module-without-any-test " )) {
failWhenNoMutations.set( false )
}
}
} เป็นไปได้ที่จะรวมรายงานที่น่าเชื่อถือสำหรับโครงการหลายโมดูลโดยใช้ปลั๊กอิน info.solidsoft.pitest.aggregator และงาน pitestReportAggregate โครงการรูทจะต้องได้รับการกำหนดค่าอย่างเหมาะสมให้ใช้ pitestReportAggregate :
// in root project configuration
plugins {
id ' info.solidsoft.pitest ' version ' 1.15.0 ' apply false
}
apply plugin : ' info.solidsoft.pitest.aggregator ' // to 'pitestReportAggregate' appear
subprojects {
apply plugin : ' java '
apply plugin : ' info.solidsoft.pitest '
pitest {
// export mutations.xml and line coverage for aggregation
outputFormats = [ " XML " ]
exportLineCoverage = true
timestampedReports = false
.. .
reportAggregator { // since 1.9.11 - extra results validation, if needed
testStrengthThreshold . set( 50 ) // simpler Groovy syntax (testStrengthThreshold = 50) does not seem to be supported for nested properties
mutationThreshold . set( 40 )
maxSurviving . set( 3 )
}
}
} // in root project configuration
plugins {
id( " info.solidsoft.pitest " ) version " 1.15.0 "
}
apply (plugin = " info.solidsoft.pitest.aggregator " )
subprojects {
apply (plugin = " java " )
apply (plugin = " info.solidsoft.pitest " )
pitest {
outputFormats.set( setOf ( " XML " ))
timestampedReports.set( false )
exportLineCoverage.set( true )
.. .
reportAggregator {
testStrengthThreshold.set( 50 )
mutationThreshold.set( 40 )
maxSurviving.set( 3 )
}
}
} หลังจากการดำเนินงาน pitest pitestReportAggregate รายงานรวมจะถูกวางไว้ใน ${PROJECT_DIR}/build/reports/pitest directory
เป็นไปได้ที่จะกลายพันธุ์รหัสที่อยู่ในโครงการย่อยที่แตกต่างกัน Gradle ภายในไม่พึ่งพาไดเรกทอรีเอาท์พุทจากโครงการย่อยอื่น ๆ แต่สร้าง JAR และใช้คลาสจากมัน สำหรับหลุมนั่นคือสองชุดของไฟล์คลาสที่แตกต่างกันดังนั้นเพื่อให้มันใช้งานได้จำเป็นต้องกำหนดทั้งสอง mainSourceSets และ additionalMutableCodePaths MutableCodepaths ตัวอย่างเช่น:
configure(project( ' :itest ' )) {
apply plugin : ' info.solidsoft.pitest '
dependencies {
implementation project( ' :shared ' )
}
configurations { mutableCodeBase { transitive false } }
dependencies { mutableCodeBase project( ' :shared ' ) }
pitest {
mainSourceSets = [project . sourceSets . main, project( ' :shared ' ) . sourceSets . main]
additionalMutableCodePaths = [configurations . mutableCodeBase . singleFile]
}
}configure( listOf (project( " :itest " ))) {
apply (plugin = " info.solidsoft.pitest " )
dependencies {
implementation(project( " :shared " ))
}
val mutableCodeBase by configurations.creating { isTransitive = false }
dependencies { mutableCodeBase(project( " :shared " )) }
pitest {
mainSourceSets.set( listOf (project.sourceSets.main.get(), project( " :shared " ).sourceSets.main.get()))
additionalMutableCodePaths.set( listOf (mutableCodeBase.singleFile))
}
}ข้างต้นเป็นวิธีที่ทีม Gradle แนะนำ แต่ในบางกรณีโซลูชันที่ง่ายกว่าควรใช้งานได้เช่นกัน:
configure(project( ' :itest ' )) {
apply plugin : ' info.solidsoft.pitest '
dependencies {
implementation project( ' :shared ' )
}
pitest {
mainSourceSets = [project . sourceSets . main, project( ' :shared ' ) . sourceSets . main]
additionalMutableCodePaths = project( ' :shared ' ) . jar . outputs . files . getFiles()
}
}configure( listOf (project( " :itest " ))) {
apply (plugin = " info.solidsoft.pitest " )
dependencies {
implementation(project( " :shared " ))
}
pitest {
mainSourceSets.set( listOf (project.sourceSets.main.get(), project( " :shared " ).sourceSets.main.get()))
additionalMutableCodePaths.set(project( " :shared " ).task( " jar " ).outputs.files)
}
}บิลด์หลายโครงการที่ใช้งานได้น้อยที่สุดมีอยู่ในชุดทดสอบการทำงาน
ปลั๊กอินทดสอบใช้เพื่อรองรับกรอบการทดสอบที่แตกต่างจาก Junit4
เริ่มต้นด้วยรุ่นนี้การกำหนดค่าที่จำเป็นในการใช้ PIT กับ Junit 5 ได้รับการทำให้ง่ายต่อไปนี้:
plugins {
id ' java '
id ' info.solidsoft.pitest ' version ' 1.15.0 '
}
pitest {
// adds dependency to org.pitest:pitest-junit5-plugin and sets "testPlugin" to "junit5"
junit5PluginVersion = ' 1.0.0 ' // or 0.15 for PIT <1.9.0
// ...
}plugins {
id( " java " )
id( " info.solidsoft.pitest " ) version " 1.15.0 "
}
pitest {
// adds dependency to org.pitest:pitest-junit5-plugin and sets "testPlugin" to "junit5"
junit5PluginVersion.set( " 1.0.0 " )
}โปรดทราบ หลุม 1.9.0 ต้องใช้ pitest-junit5-plugin 1.0.0+ Junit Jupiter 5.8 (แพลตฟอร์ม Junit 1.8) ต้องใช้ Pitest-Junit5-Plugin 0.15+ ในขณะที่ 5.7 (1.7) ต้องใช้ 0.14 ตั้งค่าเวอร์ชันปลั๊กอินที่ถูกต้องสำหรับรุ่น Junit 5 ที่ใช้ในโครงการของคุณเพื่อหลีกเลี่ยงข้อผิดพลาดรันไทม์ (เช่น `nosuchmethoderror: 'java.util.optional org.junit.platform.commons.util.annotationtils.findannotation (java.lang.
ตัวอย่างการทำงานน้อยที่สุดสำหรับ Junit 5 มีอยู่ในชุดทดสอบการทำงาน
สำหรับการผสม Junit 5 กับปลั๊กอิน PIT อื่น ๆ คุณสามารถอ่านส่วนนี้ในโพสต์บล็อกของฉัน
ในการเปิดใช้งานปลั๊กอิน PIT มันก็เพียงพอที่จะเพิ่มลงในการกำหนดค่าที่น่าเชื่อถือในการปิด BuildScript ตัวอย่างเช่น:
plugins {
id ' java '
id ' info.solidsoft.pitest ' version ' 1.15.0 '
}
repositories {
mavenCentral()
}
dependencies {
pitest ' org.example.pit.plugins:pitest-custom-plugin:0.42 '
}plugins {
id( " java " )
id( " info.solidsoft.pitest " ) version " 1.15.0 "
}
repositories {
mavenCentral()
}
dependencies {
pitest( " org.example.pit.plugins:pitest-custom-plugin:0.42 " )
}ตัวอย่างการทำงานน้อยที่สุดมีอยู่ในชุดทดสอบการทำงาน
โปรดทราบ ใน Gradle-Pitest-Plugin <1.5.0 การกำหนดค่า pitest จะต้องถูกสร้างขึ้นในขอบเขต buildscript สำหรับโครงการรูท โปรดทราบ เริ่มต้นด้วยหลุม 1.6.7 ไม่จำเป็นต้องตั้งค่าพารามิเตอร์การกำหนดค่า testPlugin อีกต่อไป มันยังเลิกใช้ในปลั๊กอิน Gradle
ทุกรุ่น Gradle-Pitest-Plugin โดยค่าเริ่มต้นใช้เวอร์ชันหลุมที่กำหนดไว้ล่วงหน้า โดยปกติแล้วจะเป็น Pit เวอร์ชันล่าสุดที่วางจำหน่ายในขณะที่ปล่อยปลั๊กอินเวอร์ชัน มันสามารถแทนที่ได้โดยใช้พารามิเตอร์ pitestVersion ในการปิดการกำหนดค่า pitest
โปรดทราบว่าในบางกรณีอาจมีปัญหาบางอย่างเมื่อใช้รุ่นที่ไม่ใช่หลุมเริ่มต้น
หากไม่ได้ระบุไว้เป็นอย่างอื่น gradle-pitest-plugin 1.9.x โดยค่าเริ่มต้นใช้หลุม 1.9.x, 1.7.x ใช้หลุม 1.7.x ฯลฯ รุ่นหลุมที่รองรับน้อยที่สุดคือ 1.7.1
เริ่มต้นด้วยเวอร์ชัน 1.7.0 Gradle-Pitest-Plugin ต้องใช้ Gradle 6.4 เวอร์ชันล่าสุดที่มีการสนับสนุน Gradle 5.X (5.6+) คือ 1.6.0 เวอร์ชันปัจจุบันได้รับการทดสอบควันโดยอัตโนมัติด้วย Gradle 6.4, 6.9.1 และ 7.4.2 ภายใต้ Java 11. การทดสอบกับ Java 11+ นั้น จำกัด อยู่ที่ Gradle และ Pit รุ่นที่เข้ากันได้
การสนับสนุนการทดลองสำหรับ Java 17 สามารถทดสอบได้ด้วย 1.7.0+
เริ่มต้นด้วยเวอร์ชัน 1.3.0 ไบนารีที่ผลิตต้องใช้ Java 8 (เป็น JDK ที่ใช้สำหรับใช้งานบิลด์ Gradle) อย่างไรก็ตามการมี Java 17 LTS เปิดตัวในเดือนกันยายน 2564 เริ่มต้นด้วย Gradle-Pitest-Plugin 1.9.0 การสนับสนุน JDK <11 เลิกใช้แล้ว (ดู #299)
ดูไฟล์ Changelog สำหรับรายการการเปลี่ยนแปลงโดยละเอียดเพิ่มเติมในปลั๊กอินเอง
Gradle ไม่ได้ให้วิธีการในตัวเพื่อแทนที่การกำหนดค่าปลั๊กอินผ่านบรรทัดคำสั่ง แต่สามารถใช้ Gradle-Override-Plugin ได้
หลังจากใช้ Gradle-Override-Plugin ในโครงการ ของคุณ แล้วก็เป็นไปได้ที่จะทำตาม:
./gradlew pitest -Doverride.pitest.reportDir=build/pitReport -Doverride.pitest.threads=8
บันทึก. กลไกควรทำงานได้ดีสำหรับคุณสมบัติสตริงและตัวเลข แต่มีข้อ จำกัด ที่มีการสนับสนุนรายการ/ชุด/แผนที่และค่าบูลีน
สำหรับข้อมูลเพิ่มเติมโปรดดูหน้าโครงการโครงการ
Gradle-Pitest-plugin โดยค่าเริ่มต้นใช้เวอร์ชันหลุมที่สอดคล้องกัน (มีหมายเลขเดียวกัน) ปลั๊กอินจะถูกปล่อยออกมาเฉพาะในกรณีที่มีการเปลี่ยนแปลงภายในหรือจำเป็นต้องปรับเปลี่ยนการเปลี่ยนแปลงในเวอร์ชันหลุมใหม่ มีกลไกเฉพาะเพื่ออนุญาตให้ใช้ PIT รุ่นล่าสุด (เช่นการปล่อยบั๊กแก้ไข) หรือเพื่อลดระดับหลุมในกรณีที่มีปัญหาที่ตรวจพบ ในการแทนที่เวอร์ชันเริ่มต้นก็เพียงพอที่จะตั้งค่าคุณสมบัติ pitestVersion ในการปิดการกำหนดค่า pitest
pitest {
pitestVersion = ' 2.8.1-the.greatest.one '
}pitest {
pitestVersion.set( " 2.8.1-the.greatest.one " )
}ในกรณีที่ตรวจพบข้อผิดพลาดเมื่อใช้ปลั๊กอินเวอร์ชันล่าสุดที่ใช้กับรุ่น PIT รุ่นใหม่โปรดเพิ่มปัญหา
การวางรายงาน PIT โดยตรงใน ${PROJECT_DIR}/build/reports/pitest สามารถเปิดใช้งานได้ด้วยคุณสมบัติการกำหนดค่า timestampedReports :
pitest {
timestampedReports = false
}pitest {
timestampedReports.set( false )
}บางครั้งอาจเป็นประโยชน์ในการดีบักการดำเนินการ Gradle-Pitest-Plugin หรือการดำเนินการหลุมตัวเอง (เช่น NPE ในหลุม) เพื่อให้รายงานข้อผิดพลาดที่สมเหตุสมผล
การดำเนินการ gradle-pitest-plugin สามารถดีบักได้จากระยะไกลด้วยการเพิ่ม -Dorg.gradle.debug=true กับบรรทัดคำสั่ง
อย่างไรก็ตามเมื่อ PIT เริ่มต้นเป็นกระบวนการแยกต่างหากเพื่อแก้ไขข้อบกพร่องการดำเนินการของมันจะต้องเพิ่มอาร์กิวเมนต์ต่อไปนี้ในการกำหนดค่าปลั๊กอิน:
pitest {
mainProcessJvmArgs = [ ' -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 ' ]
}pitest {
mainProcessJvmArgs.set( listOf ( " -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 " ))
}คำตอบสั้น ๆ คือ: ไม่โดยตรง เนื่องจากความไม่ลงรอยกันบางอย่างระหว่างแอปพลิเคชัน Java มาตรฐานและแอปพลิเคชัน Android Java ใน Gradle ปลั๊กอินไม่รองรับในภายหลัง โชคดีที่มีส้อม Android ของปลั๊กอินที่ดูแลโดย Karol Wrótniakซึ่งให้แอพพลิเคชั่น Android ที่รองรับเวอร์ชันที่ได้รับการแก้ไข (แต่ในทางกลับกันมันไม่ทำงานกับแอปพลิเคชัน Java มาตรฐาน)
ปลั๊กอิน Gradle-Pitest 1.5.0 ในที่สุดก็ผ่อนคลายวิธีที่ (ที่ไหน) การกำหนดค่า pitest ถูกวางไว้ (#62) ซึ่งก็สร้างคำเตือนการเสื่อมราคาใน Gradle 6+ การเปลี่ยนแปลงนี้ไม่สามารถใช้งานได้ย้อนหลังและเป็นผลการโยกย้ายด้วยตนเอง - ต้องทำ - ดูบันทึกย่อการเปิดตัว สิ่งนี้มีผลต่อโครงการที่มีปลั๊กอินที่กำหนดเองภายนอกเท่านั้น
สำคัญ . เนื่องจากปลั๊กอิน Junit 5 สำหรับ PIT นั้นเป็นที่นิยมมากที่สุดเริ่มต้นด้วย 1.4.7 มีวิธีที่ง่ายขึ้นว่าจะกำหนดค่าได้ด้วย junit5PluginVersion (ซึ่ง แนะนำ อย่างแน่นอน) ดูโพสต์บล็อกของฉันเพื่อหาวิธีการโยกย้าย (นอกจากนี้ยังแก้ปัญหาความเข้ากันได้ด้วย 1.5.0+)
verbosity แนะนำด้วยหลุม 1.7.1) gradle-pitest-plugin โคลนจากที่เก็บสามารถสร้างได้โดยใช้คำสั่ง Gradle:
./gradlew build
วิธีที่ง่ายที่สุดในการสร้างขวดที่มีการเปลี่ยนแปลงในท้องถิ่นที่มองเห็นได้ในโครงการอื่นคือการติดตั้งลงในที่เก็บ Maven ในพื้นที่:
./gradlew install
นอกจากนี้ยังมีการทดสอบการทำงานพื้นฐานที่เขียนโดยใช้การทดสอบเนบิวลาซึ่งสามารถทำงานได้ด้วย:
./gradlew funcTest
Gradle-Pitest-Plugin เขียนโดย Marcin Zajączkowskiด้วยความช่วยเหลือจากผู้มีส่วนร่วม ผู้เขียนสามารถติดต่อได้โดยตรงทางอีเมล: MSZPAK ATT WP DOTT PL นอกจากนี้ยังมีบล็อกของ Marcin: Solid Soft - รหัสการทำงานไม่เพียงพอ
ปลั๊กอินมีข้อบกพร่องและคุณสมบัติที่ขาดหายไปแน่นอน พวกเขาสามารถรายงานได้โดยใช้ตัวติดตามปัญหา อย่างไรก็ตามมักจะเป็นความคิดที่ดีกว่าที่จะส่งคำถามไปยังรายชื่อผู้รับจดหมายหลุมก่อน
ปลั๊กอินได้รับอนุญาตภายใต้ข้อกำหนดของใบอนุญาต Apache เวอร์ชัน 2.0