JUnit บทช่วยสอนคำอธิบายประกอบพร้อมตัวอย่าง: @Test และ @After คืออะไร

⚡ สรุปอย่างชาญฉลาด

JUnit คำอธิบายประกอบเป็นรูปแบบหนึ่งของเมตาเดตาเชิงไวยากรณ์ที่เพิ่มเข้ามา Java โค้ดต้นฉบับจะช่วยให้โปรแกรมทดสอบทราบว่าต้องเรียกใช้เมธอดใด เมื่อใดจึงจะเรียกใช้ และแต่ละเมธอดใช้เวลานานเท่าใด

  • 🔘 @ทดสอบ: ทำเครื่องหมายเมธอดสาธารณะที่เป็นค่าว่าง (void) ที่ JUnit ดำเนินการเหมือนกับการทดสอบกรณีเดียว
  • ☑️ วงจรชีวิต: @Before และ @After จะครอบคลุมทุกการทดสอบ ในขณะที่ @BeforeClass และ @AfterClass จะครอบคลุมคลาส
  • ควบคุม: @Ignore ข้ามการทดสอบ, @Test(timeout) จำกัดเวลาการทำงาน, @Test(expected) ยืนยันข้อยกเว้นที่ถูกโยนออกมา
  • 🧪 การยืนยัน: org.junit.Assert มีฟังก์ชัน assertEquals, assertTrue, assertNull, assertSame และ fail() ให้ใช้งาน
  • 🛠️ มรดก: TestCase, TestResult และ TestSuite เป็นส่วนหนึ่งของแพ็กเกจ junit.framework รุ่นเก่า
  • 📊 JUnit 5: Jupiter จะเปลี่ยนชื่อเหล่านี้เป็น @BeforeEach, @AfterEach, @BeforeAll, @AfterAll และ @Disabled

JUnit บทช่วยสอนเกี่ยวกับการใช้คำอธิบายประกอบ (annotation) ได้แก่ @Test, @Before และ @After

ความหมายของ JUnit คำอธิบายประกอบ?

JUnit คำอธิบายประกอบ เป็นรูปแบบพิเศษของเมตาเดตาเชิงไวยากรณ์ที่สามารถเพิ่มเข้าไปได้ Java โค้ดต้นฉบับช่วยให้การอ่านและการจัดโครงสร้างโค้ดดีขึ้น ตัวแปร พารามิเตอร์ แพ็กเกจ เมธอด และคลาสสามารถใส่คำอธิบายประกอบได้ คำอธิบายประกอบถูกนำมาใช้ใน JUnit 4 ซึ่งทำให้ Java โค้ดอ่านง่ายและเรียบง่ายขึ้น นี่คือความแตกต่างที่สำคัญระหว่าง JUnit 3 และ JUnit 4: JUnit 4 คือแบบอิงตามคำอธิบายประกอบ

ด้วยความรู้พื้นฐานเกี่ยวกับคำอธิบายประกอบเหล่านี้ ทำให้สามารถเรียนรู้และนำไปใช้ได้อย่างง่ายดาย JUnit ทดสอบ. ด้านล่างนี้คือสิ่งสำคัญและใช้บ่อย JUnit รายการคำอธิบายประกอบ พร้อมด้วย JUnit 5 (ดาวพฤหัสบดี) เทียบเท่าข้างๆ แต่ละรายการ:

S.No. คำอธิบายประกอบ Descriptไอออน JUnit เทียบเท่า 5
1. @ทดสอบ คำอธิบายประกอบนี้ใช้แทน junit.framework.TestCase และระบุว่าเมธอดสาธารณะแบบ void ที่แนบมาด้วยนั้นสามารถเรียกใช้เป็นกรณีทดสอบได้ @Test (org.junit.jupiter.api)
2. @ก่อน คำอธิบายประกอบนี้ถูกใช้หากคุณต้องการดำเนินการคำสั่งบางอย่าง เช่น เงื่อนไขเบื้องต้น ก่อนกรณีทดสอบแต่ละกรณี @ก่อนแต่ละ
3. @บีฟอร์คลาส คำอธิบายประกอบนี้ใช้ในกรณีที่คุณต้องการเรียกใช้คำสั่งบางอย่างก่อนเริ่มกรณีทดสอบทั้งหมด ตัวอย่างเช่น การเชื่อมต่อทดสอบที่ต้องเปิดก่อนเริ่มกรณีทดสอบทั้งหมด @ก่อนทั้งหมด
4. @หลังจาก คำอธิบายประกอบนี้สามารถใช้ได้หากคุณต้องการดำเนินการคำสั่งบางคำสั่งหลังจากนั้น กรณีทดสอบเช่น การรีเซ็ตตัวแปร หรือการลบไฟล์ชั่วคราว @AfterEach
5. @หลังเลิกเรียน คำอธิบายประกอบนี้สามารถใช้ได้หากคุณต้องการเรียกใช้คำสั่งบางอย่างหลังจากทดสอบเสร็จสิ้นทุกกรณีแล้ว ตัวอย่างเช่น การปล่อยทรัพยากรหลังจากทดสอบเสร็จสิ้นทุกกรณี @AfterAll
6. @ไม่สนใจ คำอธิบายประกอบนี้สามารถใช้ได้หากคุณต้องการละเว้นคำสั่งบางคำสั่งระหว่างการดำเนินการทดสอบ ตัวอย่างเช่น การปิดใช้งานกรณีทดสอบบางกรณีระหว่างการดำเนินการทดสอบ @พิการ
7. @ ทดสอบ (หมดเวลา = 500) คำอธิบายประกอบนี้สามารถใช้ได้หากคุณต้องการตั้งค่าการหมดเวลาในระหว่างการดำเนินการทดสอบ ตัวอย่างเช่น หากคุณทำงานภายใต้ SLA (ข้อตกลงระดับบริการ) และการทดสอบต้องเสร็จสิ้นภายในเวลาที่กำหนด @Timeout หรือ assertTimeout
8. @Test (คาดหวัง = IllegalArgumentException.class) คำอธิบายประกอบนี้สามารถใช้ได้หากคุณต้องการจัดการกับข้อยกเว้นบางอย่างระหว่างการดำเนินการทดสอบ ตัวอย่างเช่น หากคุณต้องการตรวจสอบว่าเมธอดใดเมธอดหนึ่งกำลังส่งข้อยกเว้นที่ระบุหรือไม่ assertThrows

JUnit ตัวอย่างคำอธิบายประกอบ

มาสร้างคลาสที่ครอบคลุมเรื่องสำคัญกันเถอะ JUnit คำอธิบายประกอบด้วยคำสั่งการพิมพ์อย่างง่ายและดำเนินการกับคลาสตัวทดสอบ:

ขั้นตอน 1) พิจารณาสิ่งต่อไปนี้ Java คลาสที่มีเมธอดต่างๆ ซึ่งเชื่อมโยงกับคำอธิบายประกอบที่ระบุไว้ข้างต้น:

ตัวอย่าง JunitAnnotations.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				
import static org.junit.Assert.assertFalse;				

import java.util.ArrayList;		

import org.junit.After;		
import org.junit.AfterClass;		
import org.junit.Before;		
import org.junit.BeforeClass;		
import org.junit.Ignore;		
import org.junit.Test;		

public class JunitAnnotationsExample {				

    private ArrayList<String> list;					

    @BeforeClass		
    public static void m1() {							
        System.out.println("Using @BeforeClass , executed before all test cases ");					
    }		

    @Before		
    public void m2() {					
        list = new ArrayList<String>();					
        System.out.println("Using @Before annotations ,executed before each test cases ");					
    }		

    @AfterClass		
    public static void m3() {							
        System.out.println("Using @AfterClass ,executed after all test cases");					
    }		

    @After		
    public void m4() {					
        list.clear();			
        System.out.println("Using @After ,executed after each test cases");					
    }		

    @Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

    @Ignore		
    public void m6() {					
        System.out.println("Using @Ignore , this execution is ignored");					
    }		

    @Test(timeout = 10)			
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

    @Test(expected = NoSuchMethodException.class)					
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					

    }		

}		

ขั้นตอน 2) เรามาสร้างคลาสสำหรับรันการทดสอบเพื่อเรียกใช้การทดสอบข้างต้นกัน:

TestRunner.java

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(JunitAnnotationsExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

ผลลัพธ์ที่คาดหวัง

  • ระบบจะดำเนินการทดสอบทีละกรณี และสามารถดูผลลัพธ์ทั้งหมดได้ในคอนโซล
  • ตามที่ได้กล่าวไว้ในตารางด้านบน @Before และ @BeforeClass ใน JUnit [เมธอด m2() และ m1()] จะถูกเรียกใช้ก่อนแต่ละกรณีทดสอบและก่อนทุกกรณีทดสอบตามลำดับ
  • ในทำนองเดียวกัน @After และ @AfterClass ใน JUnit เมธอด m4() และ m3() จะถูกเรียกใช้หลังจากแต่ละกรณีทดสอบและหลังจากทุกกรณีทดสอบตามลำดับ @Ignore (เมธอด m6()) จะถือว่าเป็นการละเว้นการทดสอบ

เรามาวิเคราะห์กรณีทดสอบที่ใช้ในข้างต้นกัน Java รายละเอียดของคลาส:

  1. พิจารณาวิธี m5() ดังแสดงด้านล่าง:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

ในวิธีการข้างต้น คุณกำลังเพิ่มสตริงลงในตัวแปร "list":

  • รายการ.isEmpty() จะกลับมาเป็นเท็จ
  • assertFalse (รายการ isEmpty ()) จะต้องกลับมาเป็นจริง
  • เป็นผลให้กรณีทดสอบจะ ส่ง.

เนื่องจากคุณเพิ่มสตริงลงในรายการเพียงสตริงเดียว ขนาดของรายการจึงเป็นหนึ่ง

  • รายการ.ขนาด() ต้องส่งค่าจำนวนเต็ม "1" กลับมา
  • So assertEquals(1, list.size()) จะต้องกลับมาเป็นจริง
  • เป็นผลให้กรณีทดสอบจะ ส่ง.
  1. พิจารณาวิธี m7() ดังแสดงด้านล่าง:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

ตามที่กล่าวไว้ข้างต้น @ ทดสอบ (หมดเวลา = 10) ใช้เพื่อบังคับใช้การหมดเวลาในกรณีทดสอบ ค่าที่ระบุเป็นมิลลิวินาที ดังนั้นฟังก์ชัน m7() ต้องทำงานให้เสร็จภายใน 10 มิลลิวินาที

  1. พิจารณาวิธี m8() ดังแสดงด้านล่าง:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

ตามที่กล่าวไว้ข้างต้น @ทดสอบ(คาดหวัง) เมธอด m8() จะตรวจสอบข้อยกเว้นที่ระบุไว้ในระหว่างการทำงาน ดังนั้นเมธอด m8() จะโยนข้อยกเว้น “No Such Method Exception” ส่งผลให้การทดสอบจะดำเนินการโดยมีข้อยกเว้นเกิดขึ้น

หมายเหตุความถูกต้อง: ฟังก์ชัน m8() จะพิมพ์เพียงบรรทัดเดียว ดังนั้นข้อยกเว้นที่ประกาศไว้จึงไม่ถูกโยนออกมาจริง ๆ และ JUnit 4 รายงานว่าการทดสอบล้มเหลว ปรับประเภทที่คาดหวังให้ตรงกับสิ่งที่เมธอดส่งออกมาจริง JUnit 5 เขียนข้อความนี้ด้วย assertThrows.

เมื่อผ่านกรณีทดสอบทั้งหมดแล้ว จึงส่งผลให้ดำเนินการทดสอบได้สำเร็จ

ผลลัพธ์ที่แท้จริง

เนื่องจากในตัวอย่างข้างต้นมีกรณีทดสอบสามกรณี ดังนั้นกรณีทดสอบทั้งหมดจะถูกดำเนินการทีละกรณี โปรดดูภาพหน้าจอคอนโซลด้านล่าง:

Eclipse เอาต์พุตคอนโซลที่แสดงคำสั่งพิมพ์ @BeforeClass, @Before, @After และ @AfterClass
เอาต์พุตคอนโซลที่สร้างโดย JunitAnnotationsExample

ดูคำสั่งการพิมพ์ด้านล่างซึ่งสามารถเห็นได้บนคอนโซล:

ใช้ @BeforeClass ดำเนินการก่อนกรณีทดสอบทั้งหมด

การใช้ @Before คำอธิบายประกอบ ดำเนินการก่อนแต่ละกรณีทดสอบ

ใช้ @After ดำเนินการหลังจากแต่ละกรณีทดสอบ

การใช้ @Before คำอธิบายประกอบ ดำเนินการก่อนแต่ละกรณีทดสอบ

การใช้ @Test(timeout) สามารถใช้เพื่อบังคับใช้การหมดเวลาได้ JUnit4 กรณีทดสอบ

ใช้ @After ดำเนินการหลังจากแต่ละกรณีทดสอบ

การใช้ @Before คำอธิบายประกอบ ดำเนินการก่อนแต่ละกรณีทดสอบ

เมื่อใช้ @Test(expected) มันจะตรวจสอบข้อยกเว้นที่ระบุระหว่างการดำเนินการ

ใช้ @After ดำเนินการหลังจากแต่ละกรณีทดสอบ

ใช้ @AfterClass ดำเนินการหลังจากกรณีทดสอบทั้งหมด

JUnit ยืนยันคลาส

คำอธิบายประกอบจะเป็นตัวกำหนดว่าเมธอดจะทำงานเมื่อใด ส่วนเมธอด assert จะเป็นตัวกำหนดว่าเมธอดนั้นผ่านหรือไม่

คลาสนี้มีเมธอดตรวจสอบความถูกต้องมากมายซึ่งมีประโยชน์ในการเขียนกรณีทดสอบ หากเงื่อนไขการตรวจสอบความถูกต้องทั้งหมดผ่าน การทดสอบจะประสบความสำเร็จ หากเงื่อนไขการตรวจสอบความถูกต้องใด ๆ ล้มเหลว การทดสอบจะล้มเหลว (ส่วนนี้เป็นส่วนเฉพาะของคลาส) JUnit ยืนยัน คู่มือนี้จะอธิบายแต่ละวิธีอย่างละเอียด

ดังที่คุณได้เห็นไปแล้ว ตารางด้านล่างนี้อธิบายถึงวิธีการ Assert ที่สำคัญและคำอธิบายของแต่ละวิธี:

S.No. วิธี Descriptไอออน
1. เป็นโมฆะ assertEquals (บูลีนที่คาดหวัง, บูลีนจริง) ฟังก์ชันนี้ตรวจสอบว่าค่าสองค่าเท่ากันหรือไม่ คล้ายกับเมธอด equals ของคลาส Object
2. เป็นโมฆะ assertFalse (เงื่อนไขบูลีน) หน้าที่การทำงานคือการตรวจสอบว่าเงื่อนไขนั้นเป็นเท็จ
3. เป็นโมฆะ assertNotNull (วัตถุวัตถุ) ฟังก์ชั่น “assertNotNull” คือการตรวจสอบว่าวัตถุไม่เป็นโมฆะ
4. เป็นโมฆะ assertNull (วัตถุวัตถุ) ฟังก์ชั่น "assertNull" คือการตรวจสอบว่าวัตถุนั้นเป็นโมฆะ
5. เป็นโมฆะ assertTrue (เงื่อนไขบูลีน) ฟังก์ชั่น assertTrue คือการตรวจสอบว่าเงื่อนไขเป็นจริง
6. เป็นโมฆะล้มเหลว () หากคุณต้องการโยนข้อผิดพลาดการยืนยัน (assertion error) ฟังก์ชัน fail() จะส่งผลให้ได้ผลลัพธ์เป็น fail เสมอ
7. เป็นโมฆะ assertSame ([ข้อความสตริง] ฟังก์ชั่น "assertSame" คือการตรวจสอบว่าวัตถุทั้งสองอ้างอิงถึงวัตถุเดียวกัน
8. เป็นโมฆะ assertNotSame ([ข้อความสตริง] ฟังก์ชั่น "assertNotSame" คือการตรวจสอบว่าทั้งสองวัตถุไม่ได้อ้างถึงวัตถุเดียวกัน

JUnit คลาสกรณีทดสอบ

ในการทำการทดสอบหลายครั้ง สามารถใช้คลาส TestCase ได้ เฟรมเวิร์กจูนิท แพ็คเกจ คำอธิบายประกอบ @Test บอกว่า JUnit เมธอดสาธารณะแบบ void นี้ (ซึ่งเป็นกรณีทดสอบในที่นี้) ที่แนบมาด้วย สามารถเรียกใช้เป็นกรณีทดสอบได้

หมายเหตุเกี่ยวกับเวอร์ชัน: กรณีทดสอบ, ผลการทดสอบ และ ชุดทดสอบ เป็นมรดก เฟรมเวิร์กจูนิท แพคเกจจาก JUnit 3. ถึงแม้ว่าการทดสอบแบบใช้คำอธิบายประกอบ (annotation-based tests) จะยังคงถูกจัดส่งมาพร้อมกับอาร์ติแฟกต์ JUnit 4.x แต่ก็ไม่ได้ขยายขอบเขตการใช้งาน TestCase

ตารางด้านล่างแสดงวิธีการสำคัญบางส่วนที่มีอยู่ใน จูนิท เฟรมเวิร์ก กรณีทดสอบ ระดับ:

S.No. วิธี Descriptไอออน
1. int นับ TestCases () วิธีการนี้ใช้สำหรับนับจำนวนเคสทดสอบที่ถูกดำเนินการโดยระบบ วิ่ง (TestResult tr) วิธี
2. TestResult สร้างผลลัพธ์ () วิธีการนี้ใช้ในการสร้าง ผลการทดสอบ วัตถุ.
3. สตริง getName() เมธอดนี้ส่งคืนสตริงซึ่งไม่ใช่อะไรเลยนอกจากก กรณีทดสอบ ชื่อ
4. เรียกใช้ผลการทดสอบ () วิธีนี้ใช้ในการดำเนินการทดสอบ ซึ่งจะส่งค่ากลับมาเป็น ผลการทดสอบ วัตถุ.
5. ถือเป็นโมฆะ (ผลการทดสอบ) วิธีการนี้ใช้ในการดำเนินการทดสอบที่มี ผลการทดสอบ วัตถุที่ไม่ส่งค่าใดๆ กลับมา
6. เป็นโมฆะ setName (ชื่อสตริง) วิธีนี้ใช้สำหรับกำหนดชื่อของ กรณีทดสอบ
7. การตั้งค่าเป็นโมฆะ() วิธีการนี้ใช้ในการเขียนโค้ดสำหรับการเชื่อมโยงทรัพยากร เช่น การสร้างการเชื่อมต่อฐานข้อมูล
8. โมฆะการฉีกขาด () วิธีการนี้ใช้ในการเขียนโค้ดเพื่อปล่อยทรัพยากร เช่น การปล่อยการเชื่อมต่อฐานข้อมูลหลังจากดำเนินการธุรกรรมเสร็จสิ้น

JUnit คลาสผลการทดสอบ

เมื่อคุณทำการทดสอบ ระบบจะส่งผลลัพธ์กลับมา (ในรูปแบบของ ผลการทดสอบ อ็อบเจ็กต์ TestResult นี้สามารถใช้วิเคราะห์อ็อบเจ็กต์ผลลัพธ์ได้ ผลการทดสอบนี้อาจเป็นความล้มเหลวหรือความสำเร็จก็ได้

โปรดดูตารางด้านล่างสำหรับวิธีการสำคัญที่ใช้ในคลาส junit.framework.TestResult:

S.No. วิธี Descriptไอออน
1. เป็นโมฆะ addError (ทดสอบการทดสอบ Throwable t) วิธีนี้ใช้ในกรณีที่คุณต้องการเพิ่มข้อผิดพลาดลงในการทดสอบ
2. addFailure เป็นโมฆะ (ทดสอบการทดสอบ AssertionFailedError t) วิธีนี้ใช้ในกรณีที่คุณต้องการเพิ่มความล้มเหลวลงในรายการความล้มเหลว
3. โมฆะ endTest (ทดสอบทดสอบ) วิธีการนี้ใช้เพื่อแจ้งให้ทราบว่าการทดสอบได้ดำเนินการแล้ว (เสร็จสมบูรณ์)
4. int errorCount () วิธีการนี้ใช้เพื่อตรวจสอบข้อผิดพลาดที่ตรวจพบระหว่างการทดสอบ
5. การแจกแจง ข้อผิดพลาด() เมธอดนี้จะส่งคืนชุดข้อผิดพลาด (ในที่นี้คือ Enumeration)
6. int ความล้มเหลวนับ() วิธีการนี้ใช้เพื่อนับจำนวนข้อผิดพลาดที่ตรวจพบระหว่างการดำเนินการทดสอบ
7. การรันเป็นโมฆะ (การทดสอบ TestCase) วิธีการนี้ใช้เพื่อดำเนินการกรณีทดสอบ
8. int runCount () วิธีการนี้จะนับจำนวนการทดสอบที่ดำเนินการไปแล้ว
9. โมฆะ startTest (ทดสอบการทดสอบ) วิธีการนี้ใช้เพื่อแจ้งว่าการทดสอบเริ่มต้นแล้ว
10. โมฆะหยุด () วิธีนี้ใช้เพื่อหยุดการทดสอบ

JUnit คลาสชุดทดสอบ

หากคุณต้องการเรียกใช้การทดสอบหลายรายการตามลำดับที่กำหนด คุณสามารถทำได้โดยการรวมการทดสอบทั้งหมดไว้ในที่เดียว สถานที่นี้เรียกว่าชุดทดสอบ และ JUnit ชุดทดสอบ คู่มือนี้จะอธิบายตัวอย่างโดยละเอียด

โปรดดูตารางด้านล่างสำหรับวิธีการสำคัญที่ใช้ใน จูนิท เฟรมเวิร์ก ชุดทดสอบ ระดับ:

S.No. วิธี Descriptไอออน
1. เป็นโมฆะ addTest (ทดสอบการทดสอบ) วิธีการนี้ใช้ถ้าคุณต้องการเพิ่มการทดสอบลงในชุดโปรแกรม
2. เป็นโมฆะ addTestSuite (Class คลาสทดสอบ) วิธีการนี้ใช้ถ้าคุณต้องการระบุคลาสในขณะที่เพิ่มการทดสอบลงในชุดโปรแกรม
3. int นับ TestCases () วิธีการนี้ใช้ถ้าคุณต้องการนับจำนวนกรณีทดสอบ
4. สตริง getName() วิธีนี้ใช้เพื่อรับชื่อของชุดทดสอบ
5. ถือเป็นโมฆะ (ผลการทดสอบ) วิธีการนี้ใช้ในการดำเนินการทดสอบและรวบรวมผลการทดสอบในรูปแบบไฟล์ ผลการทดสอบ วัตถุ.
6. เป็นโมฆะ setName (ชื่อสตริง) วิธีนี้ใช้สำหรับกำหนดชื่อของ ชุดทดสอบ.
7. ทดสอบ testAt (ดัชนี int) วิธีนี้ใช้ในกรณีที่คุณต้องการส่งคืนค่าการทดสอบที่ดัชนีที่กำหนด
8. int testCount () วิธีนี้ใช้ในกรณีที่คุณต้องการส่งคืนจำนวนการทดสอบในชุดทดสอบ
9. คำเตือนการทดสอบแบบคงที่ (ข้อความสตริง) วิธีนี้จะส่งคืนการทดสอบซึ่งจะล้มเหลวและบันทึกข้อความเตือน

คำถามที่พบบ่อย

ใช่แล้ว โดยทั่วไปแล้ว เมธอดหนึ่งๆ มักใช้ @Test ร่วมกับ @Ignore หรือใช้ @Test ร่วมกับทั้งการกำหนดเวลาหมดอายุและข้อยกเว้นที่คาดหวังไว้ คุณไม่สามารถใช้คำอธิบายประกอบวงจรชีวิตสองตัวซ้อนกัน เช่น @Before และ @After ในเมธอดเดียวกันได้

@Ignore จะระงับการทำงานของเมธอดเท่านั้น JUnit ถือว่าเป็นแบบทดสอบอยู่แล้ว หากไม่มี @Test อยู่ข้างๆ ตัวรันเนอร์จะไม่รวบรวมเมธอดนั้น ดังนั้นจึงไม่มีการรันหรือแสดงรายการที่ถูกข้ามไป

JUnit เรียกใช้เมธอดในเธรดแยกต่างหาก และจะล้มเหลวด้วยข้อผิดพลาด TestTimedOutException เมื่อเวลาที่กำหนดหมดลง เธรดจะถูกขัดจังหวะ ไม่ได้ถูกฆ่า ดังนั้นการเรียกที่บล็อกอาจยังคงทำงานต่อไปได้

เฉพาะผ่านเอนจิ้นวินเทจเท่านั้น การเพิ่ม junit-vintage-engine จะช่วยให้ JUnit แพลตฟอร์มรันการทดสอบ org.junit ที่มีอยู่โดยไม่เปลี่ยนแปลง แต่การทดสอบ Jupiter ต้องนำเข้า org.junit.jupiter.api การผสมชุดการนำเข้าทั้งสองแบบในคลาสเดียวกันจะล้มเหลว

ใช้สำหรับการบำรุงรักษาเท่านั้น ชุดทดสอบแบบเดิมที่ขยายอ็อบเจ็กต์ TestCase และสร้าง TestSuite ยังคงพบได้ทั่วไปในโค้ดเบสเก่า ดังนั้นการรู้จัก API จึงช่วยได้ การทดสอบใหม่ควรใช้การระบุคำอธิบายประกอบ (annotation) เป็นหลัก

JUnit สร้างอินสแตนซ์ใหม่ของคลาสทดสอบสำหรับทุกเมธอดทดสอบ ดังนั้นจึงไม่มีอินสแตนซ์ใด ๆ อยู่เมื่อต้องเรียกใช้การตั้งค่าระดับคลาส เมธอดแบบสแตติกไม่จำเป็นต้องมีอินสแตนซ์ และ JUnit ปฏิเสธการประกาศที่ไม่ใช่แบบคงที่

ผู้ช่วย AI จะอ่านเมธอดที่กำลังทดสอบและแนะนำว่าควรใส่ setup ไว้ใน @Before หรือ @BeforeClass และเส้นทางความล้มเหลวจำเป็นต้องใช้ @Test(expected) หรือ assertThrows หรือไม่ ให้ถือว่าทุกคำแนะนำเป็นร่างเบื้องต้น

นักบิน GitHub โดยปกติแล้วจะจัดวางการติดตั้งและการรื้อถอนอย่างถูกต้อง แต่บ่อยครั้งที่มันปะปนกันไป JUnit 4 และ Jupiter นำเข้าในไฟล์เดียว ตรวจสอบบล็อกการนำเข้าก่อนเรียกใช้ชุดทดสอบ

สรุปโพสต์นี้ด้วย: