มิถุนายน 5 เป็นรุ่นต่อไปของ JUnit เป้าหมายคือการสร้างรากฐานที่ทันสมัยสำหรับการทดสอบฝั่งนักพัฒนาบน JVM ซึ่งรวมถึงการเน้นที่ Java 8 ขึ้นไป รวมถึงการเปิดใช้การทดสอบรูปแบบต่างๆ มากมาย
คุณสามารถใช้ทั้ง Maven และ Gradle
หากคุณกำลังใช้ Maven คุณต้องเพิ่มการพึ่งพาต่อไปนี้ใน pom.xml
ของคุณ ไฟล์:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@JUnit 5 คำอธิบายประกอบ
คุณจะสังเกตเห็นว่าใน Junit 5 การเปลี่ยนแปลงที่ชัดเจนที่สุดอย่างหนึ่งคือไม่ต้องเปิดเผยคลาสและวิธีการทดสอบอีกต่อไป
ตอนนี้ มาดูรายการคำอธิบายประกอบ JUnit 5 ที่พบบ่อยที่สุดกัน
@Test
คำอธิบายประกอบนี้แสดงว่าเมธอดเป็นวิธีทดสอบ โปรดทราบว่าคำอธิบายประกอบนี้ไม่ใช้แอตทริบิวต์ใดๆ
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JUnit5Test {
@Test
void helloJUnit5() {
assertEquals(10, 5+5);
}
}
@ParameterizedTest
การทดสอบที่มีพารามิเตอร์ทำให้สามารถเรียกใช้การทดสอบได้หลายครั้งด้วยอาร์กิวเมนต์ที่แตกต่างกัน มีการประกาศเหมือนกับ @Test
. ปกติ เมธอด แต่ใช้ @ParameterizedTest
คำอธิบายประกอบแทน
นอกจากนี้ คุณต้องประกาศแหล่งที่มาอย่างน้อยหนึ่งแหล่งที่จะจัดเตรียมอาร์กิวเมนต์สำหรับการเรียกใช้แต่ละครั้ง จากนั้นใช้อาร์กิวเมนต์ในวิธีการทดสอบ
ตัวอย่างเช่น ตัวอย่างต่อไปนี้แสดงการทดสอบแบบกำหนดพารามิเตอร์ที่ใช้ @ValueSource
คำอธิบายประกอบเพื่อระบุอาร์เรย์สตริงเป็นแหล่งของอาร์กิวเมนต์
ตัวอย่าง:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
class JUnit5Test {
@ParameterizedTest
@ValueSource(strings = { "cali", "bali", "dani" })
void endsWithI(String str) {
assertTrue(str.endsWith("i"));
}
}
@RepeatedTest
JUnit 5 มีความสามารถในการทดสอบซ้ำตามจำนวนที่กำหนดได้ง่ายๆ โดยการใส่คำอธิบายประกอบวิธีการด้วย @RepeatedTest
และระบุจำนวนซ้ำที่ต้องการได้
การเรียกใช้การทดสอบซ้ำแต่ละครั้งมีลักษณะเหมือนการเรียกใช้ @Test
. ปกติ วิธีการ
สิ่งนี้มีประโยชน์อย่างยิ่งในการทดสอบ UI ด้วยซีลีเนียม
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JUnit5Test {
@RepeatedTest(value = 5, name = "{displayName} {currentRepetition}/{totalRepetitions}")
@DisplayName("RepeatingTest")
void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
int i = 3;
System.out.println(testInfo.getDisplayName() +
"-->" + repInfo.getCurrentRepetition()
);
assertEquals(repInfo.getCurrentRepetition(), i);
}
}
ดังที่คุณเห็นจากผลการทดสอบเมื่อ i==3
, การทดสอบผ่าน มิฉะนั้น จะล้มเหลว
@DisplayName
คลาสการทดสอบและวิธีการทดสอบสามารถประกาศชื่อที่แสดงที่กำหนดเองซึ่งจะแสดงโดยนักวิ่งทดสอบและรายงานการทดสอบ
ตัวอย่าง:
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@DisplayName("DisplayName Demo")
class JUnit5Test {
@Test
@DisplayName("Custom test name")
void testWithDisplayName() {
}
@Test
@DisplayName("Print test name")
void printDisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
}
}
@BeforeEach
@BeforeEach
หมายเหตุประกอบระบุว่าวิธีการที่มีคำอธิบายประกอบควรดำเนินการก่อนวิธีทดสอบแต่ละวิธี ซึ่งคล้ายกับ @Before
ของ JUnit 4 .
ตัวอย่าง:
import org.junit.jupiter.api.*;
class JUnit5Test {
@BeforeEach
void init(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
}
เอาท์พุต:
firstTest
1
secondTest
2
@AfterEach
คำอธิบายประกอบนี้ระบุว่าวิธีการที่มีคำอธิบายประกอบควรดำเนินการหลังจากแต่ละวิธีทดสอบ ซึ่งคล้ายกับ @After
ของ JUnit 4 . ตัวอย่างเช่น หากการทดสอบจำเป็นต้องรีเซ็ตคุณสมบัติหลังจากการทดสอบแต่ละครั้ง เราสามารถใส่คำอธิบายประกอบเมธอดด้วย @AfterEach
สำหรับงานนั้นๆ
import org.junit.jupiter.api.*;
class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterEach
void after(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
}
เอาท์พุต:
1
firstTest
2
secondTest
@BeforeAll
คำอธิบายประกอบนี้ดำเนินการวิธีการก่อนการทดสอบทั้งหมด นี่คล้ายกับ @BeforeClass
ของ JUnit 4 . @BeforeAll
โดยทั่วไปจะใช้คำอธิบายประกอบเพื่อเริ่มต้นสิ่งต่าง ๆ สำหรับการทดสอบ
ตัวอย่าง:
import org.junit.jupiter.api.*;
class JUnit5Test {
@BeforeAll
static void init() {
System.out.println("Only run once before all tests");
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
}
เอาท์พุต:
Only run once before all tests
1
2
@AfterAll
@AfterAll
คำอธิบายประกอบใช้เพื่อดำเนินการวิธีการที่มีคำอธิบายประกอบ หลังจากดำเนินการทดสอบทั้งหมดแล้วเท่านั้น ซึ่งคล้ายกับ @AfterClass
. ของ JUnit 4 เราใช้คำอธิบายประกอบนี้เพื่อทำลายหรือยุติกระบวนการทั้งหมดเมื่อสิ้นสุดการทดสอบทั้งหมด
ตัวอย่าง:
import org.junit.jupiter.api.*;
class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterAll
static void after() {
System.out.println("Only run once after all tests");
}
}
เอาท์พุต:
1
2
Only run once after all tests
@Tag
เราสามารถใช้คำอธิบายประกอบนี้เพื่อประกาศแท็กสำหรับการกรองการทดสอบ ที่ระดับคลาสหรือเมธอด
@Tag
คำอธิบายประกอบมีประโยชน์เมื่อเราต้องการสร้างชุดทดสอบด้วยการทดสอบที่เลือก
ตัวอย่าง:
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("smoke")
class JUnit5Test {
@Test
@Tag("login")
void validLoginTest() {
}
@Test
@Tag("search")
void searchTest() {
}
}
@Disabled
@Disabled
คำอธิบายประกอบใช้เพื่อปิดหรือข้ามการทดสอบที่ระดับคลาสหรือเมธอด ซึ่งคล้ายกับ @Ignore
. ของ JUnit 4 .
เมื่อประกาศในระดับชั้นเรียน @test
. ทั้งหมด วิธีการจะถูกข้ามไป เมื่อเราใช้ @Disabled
ที่ระดับวิธีการ จะปิดใช้งานเฉพาะวิธีการที่มีคำอธิบายประกอบเท่านั้น
ตัวอย่าง:
@Disabled
ใช้เพื่อปิดการใช้งานคลาสทดสอบ:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@Disabled
class DisabledClassDemo {
@Test
void testWillBeSkipped() {
}
}
ตัวอย่าง:
@Disabled
คำอธิบายประกอบที่ใช้เพื่อปิดใช้งานวิธีการทดสอบ:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
}
}