JUnit กรณีทดสอบ @Before @BeforeClass คำอธิบายประกอบ
⚡ สรุปอย่างชาญฉลาด
JUnit เป็นเฟรมเวิร์กสำหรับการทดสอบหน่วยที่ใช้กันอย่างแพร่หลายที่สุด Javaและคำอธิบายประกอบชุดทดสอบจะควบคุมสิ่งที่เกิดขึ้นก่อนและหลังการเรียกใช้เมธอดทดสอบแต่ละครั้งภายในคลาสทดสอบอย่างแม่นยำ

JUnit เป็นหน่วยที่ได้รับความนิยมมากที่สุด การทดสอบ กรอบใน Java- ขอแนะนำอย่างชัดเจนสำหรับ การทดสอบหน่วย. JUnit ไม่จำเป็นต้องใช้เซิร์ฟเวอร์ในการทดสอบเว็บแอปพลิเคชัน ซึ่งทำให้กระบวนการทดสอบรวดเร็วขึ้น
การขอ JUnit กรอบงานยังช่วยให้สร้างกรณีทดสอบและข้อมูลการทดสอบได้อย่างรวดเร็วและง่ายดาย ที่ org.junit แพ็คเกจประกอบด้วยอินเทอร์เฟซและคลาสจำนวนมากสำหรับ JUnit การทดสอบ เช่น Test, Assert, After และ Before ซึ่งเป็นการทดสอบในวงกว้างกว่านั้น JUnit ครอบครัวสร้างขึ้นบนรากฐานเดียวกันนี้
Test Fixture คืออะไร?
ก่อนที่เราจะเข้าใจว่า test fixture คืออะไร เรามาศึกษาโค้ดด้านล่างกันก่อน
รหัสนี้ออกแบบมาเพื่อดำเนินการสองกรณีทดสอบในไฟล์ธรรมดา
public class OutputFileTest { private File output; output = new File(...); output.delete(); public void testFile1(){ //Code to verify Test Case 1 } output.delete(); output = new File(...); public void testFile2(){ //Code to verify Test Case 2 } output.delete(); }
ปัญหาเล็กน้อยที่นี่
- โค้ดนี้อ่านยาก
- รหัสนี้ไม่ใช่เรื่องง่ายที่จะรักษา
- เมื่อชุดการทดสอบมีความซับซ้อน โค้ดอาจมีปัญหาเชิงตรรกะได้
เปรียบเทียบรหัสเดียวกันโดยใช้ JUnit.
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
โค้ดนี้อ่านง่ายและดูแลรักษาง่ายกว่ามาก โครงสร้างโค้ดข้างต้นคือ อุปกรณ์ทดสอบ
อุปกรณ์ทดสอบคือบริบทที่ JUnit กรณีทดสอบ วิ่ง โดยทั่วไป อุปกรณ์ทดสอบได้แก่:
- ออบเจ็กต์หรือทรัพยากรที่พร้อมใช้งานสำหรับกรณีทดสอบใดๆ
- กิจกรรมที่จำเป็นเพื่อให้วัตถุและทรัพยากรเหล่านี้พร้อมใช้งาน
- กิจกรรมเหล่านี้ได้แก่
- การจัดสรร (การติดตั้ง)
- ยกเลิกการจัดสรร (น้ำตาตก).
ติดตั้งและรื้อถอน
ตารางการแข่งขันมีความสำคัญเพราะ JUnit เรียกใช้ฟังก์ชันเหล่านี้ในทุกการทดสอบ
- โดยปกติแล้ว มีงานที่ต้องทำซ้ำๆ ก่อนการทดสอบแต่ละกรณี ตัวอย่าง: สร้างการเชื่อมต่อฐานข้อมูล
- ในทำนองเดียวกัน ในตอนท้ายของแต่ละกรณีทดสอบ อาจมีงานที่ทำซ้ำบางกรณี ตัวอย่าง: เพื่อล้างข้อมูลเมื่อการดำเนินการทดสอบสิ้นสุดลง
- JUnit มีคำอธิบายประกอบที่ช่วยในการตั้งค่าและยกเลิกการตั้งค่า ทำให้มั่นใจได้ว่าทรัพยากรได้รับการปล่อย และระบบทดสอบอยู่ในสถานะพร้อมสำหรับกรณีทดสอบถัดไป
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน JUnit คำอธิบายประกอบจะกล่าวถึงในหัวข้อถัดไป
การติดตั้ง
@ก่อน คำอธิบายประกอบใน JUnit ใช้กับวิธีการที่มี Java โค้ดนี้จะทำงานก่อนการทดสอบแต่ละครั้ง กล่าวคือ จะทำงานก่อนการดำเนินการทดสอบแต่ละครั้ง
การรื้อถอน (โดยไม่คำนึงถึงคำตัดสิน)
@หลังจาก มีการใช้คำอธิบายประกอบกับเมธอดที่มี Java โค้ดที่จะทำงานหลังจากแต่ละกรณีทดสอบ เมธอดเหล่านี้จะทำงานแม้ว่าจะเกิดข้อยกเว้นใดๆ ในกรณีทดสอบหรือในกรณีที่การตรวจสอบล้มเหลวก็ตาม
หมายเหตุ
- อนุญาตให้มีคำอธิบายประกอบจำนวนเท่าใดก็ได้ตามรายการข้างต้น
- วิธีการทั้งหมดที่มีคำอธิบายประกอบด้วย @ก่อน in JUnit จะทำงานก่อนแต่ละกรณีทดสอบ แต่อาจทำงานในลำดับใดก็ได้
- คุณสามารถสืบทอดเมธอด @Before และ @After จากคลาสแม่ได้ การทำงานจะเป็นดังนี้ ซึ่งเป็นกระบวนการทำงานมาตรฐานใน JUnit.
- ดำเนินการ JUnit @Before วิธีการในซูเปอร์คลาส
- ดำเนินการเมธอด @Before ในคลาสนี้
- ดำเนินการเมธอด @Test ในคลาสนี้
- ดำเนินการเมธอด @After ในคลาสนี้
- ดำเนินการเมธอด @After ในซูเปอร์คลาส
JUnit หมายเหตุปี 5: คำอธิบายประกอบเหล่านี้คือ JUnit 4 (org.junit). JUnit 5 เปลี่ยนชื่อพวกมันใน org.junit.jupiter.apiและ JUnit โค้ด 4 ข้อด้านล่างนี้ยังคงทำงานได้กับเครื่องยนต์รุ่นเก่า
| JUnit 4 คำอธิบายประกอบ | JUnit เทียบเท่า 5 (ดาวพฤหัสบดี) | วิ่ง |
|---|---|---|
| @ก่อน | @ก่อนแต่ละ | ก่อนวิธีการทดสอบทุกครั้ง |
| @หลังจาก | @AfterEach | หลังจากวิธีการทดสอบทุกวิธี |
| @บีฟอร์คลาส | @ก่อนทั้งหมด | ครั้งหนึ่งต่อหน้าทั้งชั้นเรียน |
| @หลังเลิกเรียน | @AfterAll | หลังจากเรียนจบทั้งชั้นเรียนแล้วครั้งหนึ่ง |
| @ไม่สนใจ | @พิการ | ข้ามการทดสอบที่มีคำอธิบายประกอบ |
ตัวอย่าง: การสร้างคลาสโดยใช้ไฟล์เป็นข้อมูลทดสอบ
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
ในตัวอย่างข้างต้น ลำดับการดำเนินการจะเป็นดังนี้ แผนภาพ tracมีการสร้าง-ทดสอบ-ลบหนึ่งรอบต่อวิธีการทดสอบหนึ่งวิธี
- createOutputFile()
- ทดสอบไฟล์1()
- ลบไฟล์เอาท์พุต()
- createOutputFile()
- ทดสอบไฟล์2()
- ลบไฟล์เอาท์พุต()
อัสสัมชั:
testFile1() จะทำงานก่อน testFile2() ซึ่งไม่รับประกันว่าจะเกิดขึ้นเสมอไป
การตั้งค่าเพียงครั้งเดียว
- เป็นไปได้ที่จะรันเมธอดเพียงครั้งเดียวสำหรับคลาสการทดสอบทั้งหมดก่อนที่จะดำเนินการการทดสอบใดๆ และก่อนหน้าการทดสอบใดๆ @ก่อน วิธีการ
- การตั้งค่าแบบ "ครั้งเดียวจบ" มีประโยชน์สำหรับการเริ่มต้นเซิร์ฟเวอร์ การเปิดการสื่อสาร และงานอื่นๆ ที่คล้ายกัน การปิดและเปิดทรัพยากรใหม่ทุกครั้งหลังการทดสอบนั้นเสียเวลามาก
- ซึ่งสามารถทำได้โดยใช้คำอธิบายประกอบ @บีฟอร์คลาส in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
วิธีการจะต้องเป็น โมฆะคงที่สาธารณะ, เพราะ JUnit จะเรียกใช้ฟังก์ชันนี้ก่อนที่อินสแตนซ์ทดสอบใดๆ จะเกิดขึ้น
รื้อลงเพียงครั้งเดียว
- เช่นเดียวกับการตั้งค่าที่ทำเพียงครั้งเดียว ระบบก็มีวิธีการล้างข้อมูลที่ทำเพียงครั้งเดียวเช่นกัน โดยจะทำงานหลังจากวิธีการทดสอบทั้งหมดเสร็จสิ้น @หลังจาก คำอธิบายประกอบได้รับการดำเนินการแล้ว
- มันมีประโยชน์สำหรับการหยุดping เซิร์ฟเวอร์และการปิดช่องทางการสื่อสาร
- สามารถทำได้โดยใช้ @หลังเลิกเรียน คำอธิบายประกอบ
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit ห้องทดสอบ
เมื่อมีการติดตั้งฟิกซ์เจอร์แล้ว คลาสทดสอบที่เกี่ยวข้องมักจะถูกจัดกลุ่มและเปิดใช้งานพร้อมกัน
หากเราต้องการเรียกใช้การทดสอบหลายรายการตามลำดับที่กำหนด เราสามารถทำได้โดยการรวมการทดสอบทั้งหมดไว้ในที่เดียว ซึ่งเรียกว่าชุดทดสอบ รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการเรียกใช้ชุดทดสอบและวิธีการใช้งานจะอยู่ในส่วนต่อไป JUnit ครอบคลุมอยู่ในนี้ เกี่ยวกับการสอน.
JUnit นักวิ่งทดสอบ
JUnit จัดเตรียมเครื่องมือสำหรับการดำเนินการกรณีทดสอบของคุณ
- JUnitแกน คลาสใช้เพื่อดำเนินการทดสอบเหล่านี้
- วิธีการที่เรียกว่า รันคลาส ให้บริการโดย org.junit.runner.JUnitแกน ใช้เพื่อรันคลาสทดสอบหนึ่งหรือหลายคลาส
- ประเภทการส่งคืนของวิธีนี้คือ ผล วัตถุ (org.junit.runner.ผลลัพธ์ซึ่งใช้สำหรับเข้าถึงข้อมูลเกี่ยวกับการทดสอบ โปรดดูตัวอย่างโค้ดต่อไปนี้เพื่อความเข้าใจที่ชัดเจนยิ่งขึ้น
public class Test { public static void main(String[] args) { Result result = JUnitCore.runClasses(CreateAndSetName.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
ในโค้ดด้านบน อ็อบเจ็กต์ "result" จะถูกประมวลผลเพื่อรับผลลัพธ์ที่ล้มเหลวและสำเร็จของกรณีทดสอบที่เรากำลังดำเนินการ ตัวช่วยต่างๆ เช่น ยืนยันเท่ากับ ยกความล้มเหลวเหล่านั้นขึ้นมา ในขณะที่ @ไม่สนใจ ข้ามการทดสอบ
JUnit หมายเหตุปี 5: JUnitแกน คือ JUnit 4 รันเนอร์ JUnit 5 แทนที่ด้วย JUnit แพลตฟอร์ม เปิด โดยปกติแล้ว API จะเริ่มต้นทำงานโดย IDE Gradle หรือ Maven Surefire
ชื่อจริง JUnit โครงการ
มีความรู้เกี่ยวกับ SDLC ในระดับปานกลาง Java การเขียนโปรแกรม และพื้นฐานของ... การทดสอบซอฟต์แวร์ กระบวนการนี้ช่วยให้เข้าใจ JUnit โปรแกรม เช่นเดียวกับความรู้เกี่ยวกับวิธีการ การทดสอบหน่วย แตกต่างจากการทดสอบการบูรณาการ
มาทำความเข้าใจการทดสอบหน่วยโดยใช้ตัวอย่างจริงกัน เราจำเป็นต้องสร้างคลาสทดสอบที่มีเมธอดทดสอบซึ่งติดคำอธิบายประกอบด้วย @ทดสอบ ตามที่ระบุด้านล่าง:
MyFirstClassTest.java
package guru99.JUnit; import static org.junit.Assert.*; import org.junit.Test; public class MyFirstClassTest { @Test public void myFirstMethod(){ String str= "JUnit is working fine"; assertEquals("JUnit is working fine",str); } }
TestRunner.java
ในการเรียกใช้เมธอดทดสอบของเรา (ด้านบน) เราจำเป็นต้องสร้างตัวเรียกใช้การทดสอบ ในตัวเรียกใช้การทดสอบ เราต้องเพิ่มคลาสทดสอบเป็นพารามิเตอร์ใน JUnitเมธอด runClasses() ของ Core จะส่งคืนผลลัพธ์ของการทดสอบ โดยขึ้นอยู่กับว่าการทดสอบผ่านหรือล้มเหลว
สำหรับรายละเอียดเพิ่มเติม โปรดดูโค้ดด้านล่าง:
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(MyFirstClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
เอาท์พุต
เคย TestRunner.java เมื่อเรารันเมธอดทดสอบแล้ว ผลลัพธ์ที่ได้จะเป็นไม่ผ่านหรือผ่าน โปรดดูคำอธิบายผลลัพธ์ด้านล่าง:
- ในตัวอย่างนี้ หลังจากดำเนินการแล้ว MyFirstClassTest.javaการทดสอบผ่านแล้วและผลลัพธ์เป็นสีเขียว
- หากเกิดความล้มเหลว ระบบจะแสดงผลลัพธ์เป็นสีแดง และสามารถสังเกตความล้มเหลวได้จากการแสดงผลความล้มเหลว trace. ดู JUnit GUI ด้านล่าง:


