5.1 คำอธิบายประกอบ @ParameterizedTest
บางครั้งคุณแค่ต้องการเรียกการทดสอบหลายๆ ครั้งด้วยพารามิเตอร์ที่แตกต่างกัน: ค่าที่แตกต่างกัน, พารามิเตอร์อินพุตที่แตกต่างกัน, ชื่อผู้ใช้ที่แตกต่างกัน JUnit มีจุดมุ่งหมายเพื่อทำให้ชีวิตของคุณง่ายขึ้น ดังนั้นสำหรับกรณีนี้ จึงมีการทดสอบแบบพารามิเตอร์
หากต้องการใช้การทดสอบแบบกำหนดพารามิเตอร์ คุณต้องเพิ่มการพึ่งพาอีกหนึ่งอย่างให้กับpom.xml
:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
จากนั้นเราจะพิจารณาตัวอย่าง:
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
//test code
}
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
วิธีการทดสอบแต่ละวิธีจะถูกเรียกใช้ 3 ครั้ง และทุกครั้งที่เรียกใช้ จะมีการส่งพารามิเตอร์อื่นไปให้ ค่าถูกตั้งค่าโดยใช้คำอธิบายประกอบอื่น- @ValueSource แต่ต้องมีการพูดเพิ่มเติมเกี่ยวกับเรื่องนี้
5.2 คำอธิบายประกอบ @ValueSource
คำอธิบายประกอบ@ValueSourceนั้นยอดเยี่ยมสำหรับการทำงานกับคำดั้งเดิมและตัวอักษร เพียงแสดงรายการค่าพารามิเตอร์ที่คั่นด้วยเครื่องหมายจุลภาคและการทดสอบจะถูกเรียกหนึ่งครั้งสำหรับแต่ละค่า
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
แต่ยังมีข้อเสีย - คำอธิบายประกอบนี้ไม่รองรับค่า Null ดังนั้นคุณจะต้องใช้ไม้ค้ำพิเศษสำหรับมัน- @NullSource ดูเหมือนว่า:
@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
assertTrue(argument == null);
}
5.3 คำอธิบายประกอบ @EnumSource
นอกจากนี้ยังมีคำอธิบายประกอบพิเศษ@EnumSourceซึ่งส่งผ่านค่าทั้งหมดของ Enum เฉพาะไปยังเมธอด แอปพลิเคชันมีลักษณะดังนี้:
enum Direction {
EAST, WEST, NORTH, SOUTH
}
@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
assertNotNull(d);
}
5.4 คำอธิบายประกอบ @MethodSource
แต่จะส่งผ่านวัตถุเป็นพารามิเตอร์ได้อย่างไร? โดยเฉพาะอย่างยิ่งหากมีอัลกอริทึมการก่อสร้างที่ซับซ้อน ในการทำเช่นนี้ คุณสามารถระบุวิธีการช่วยเหลือพิเศษที่จะส่งคืนรายการ (สตรีม) ของค่าดังกล่าว
ตัวอย่าง:
@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
assertNotNull(argument);
}
static Stream<String> argsProviderFactory() {
return Stream.of("one", "two", "three");
}
การทดสอบพารามิเตอร์ด้วยอาร์กิวเมนต์หลายตัว
แน่นอนคุณเคยสงสัยแล้วว่าจะทำอย่างไรถ้าคุณต้องการส่งพารามิเตอร์หลายตัวไปยังเมธอด มี คำอธิบายประกอบ @CSVSource ที่ยอดเยี่ยมสำหรับสิ่ง นี้ ช่วยให้คุณแสดงรายการค่าของพารามิเตอร์เมธอดโดยคั่นด้วยเครื่องหมายจุลภาค
ตัวอย่าง:
@ParameterizedTest
@CsvSource({
"alex, 30, Programmer, Working",
"brian, 35, Tester, Working",
"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
//method code
}
GO TO FULL VERSION