เมื่อเร็ว ๆ นี้นี่เป็นหัวข้อในบล็อกโพสต์ของ Gradle หยุดการเรียกใช้การทดสอบของคุณใหม่ ผู้เขียนแสดงให้เห็นตัวอย่างการใช้outputs.upToDateWhen { false }
และอธิบายว่าทำไมมันเป็นความผิด:
นี่ไม่ได้บังคับให้รีรันจริง
สิ่งที่ผู้เขียนตัวอย่างข้อมูลนี้อาจต้องการพูดคือ“ ทำการทดสอบซ้ำเสมอ” นั่นไม่ใช่สิ่งที่ตัวอย่างนี้ทำ มันจะทำเครื่องหมายว่างานล้าสมัยเท่านั้นบังคับให้ Gradle สร้างเอาต์พุตขึ้นใหม่ แต่นี่คือสิ่งที่หากเปิดใช้งานบิวด์แคช Gradle ไม่จำเป็นต้องรันงานเพื่อสร้างเอาต์พุตใหม่ จะพบรายการในแคชและแตกผลลัพธ์ลงในไดเร็กทอรีเอาต์พุตของการทดสอบ
เช่นเดียวกับตัวอย่างข้อมูลนี้:
test.dependsOn cleanTest
Gradle จะแกะผลการทดสอบออกจากบิลด์แคชหลังจากล้างเอาต์พุตแล้วจึงไม่มีการรันซ้ำ ในระยะสั้นตัวอย่างเหล่านี้กำลังสร้าง no-op ที่มีราคาแพงมาก
หากตอนนี้คุณคิดว่า“ โอเคฉันจะปิดการใช้งานแคชด้วย” ให้ฉันบอกคุณว่าทำไมคุณไม่ควรทำ
จากนั้นผู้เขียนจะอธิบายต่อไปว่าทำไมการเรียกใช้การทดสอบบางอย่างใหม่จึงเสียเวลา:
การทดสอบส่วนใหญ่ของคุณควรกำหนดขึ้นกล่าวคือได้รับปัจจัยการผลิตเดียวกันซึ่งควรให้ผลลัพธ์เดียวกัน
ในบางกรณีที่คุณต้องการเรียกใช้การทดสอบอีกครั้งโดยที่โค้ดไม่ได้เปลี่ยนแปลงคุณควรจำลองเป็นอินพุต ต่อไปนี้เป็นตัวอย่างทั้งจากบล็อกโพสต์ที่แสดงการเพิ่มอินพุตเพื่อให้งานใช้ในระหว่างการตรวจสอบล่าสุด
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
ฉันขอแนะนำให้อ่านบล็อกโพสต์ทั้งหมด