JUnit กรณีทดสอบ @Before @BeforeClass คำอธิบายประกอบ
JUnit เป็นหน่วยที่ได้รับความนิยมมากที่สุด การทดสอบ กรอบใน Java- ขอแนะนำอย่างชัดเจนสำหรับ การทดสอบหน่วย. JUnit ไม่ต้องใช้เซิร์ฟเวอร์ในการทดสอบเว็บแอปพลิเคชัน ซึ่งทำให้กระบวนการทดสอบรวดเร็ว
JUnit กรอบงานยังช่วยให้สร้างกรณีทดสอบและข้อมูลการทดสอบได้อย่างรวดเร็วและง่ายดาย ที่ org.จูนิต แพ็คเกจประกอบด้วยอินเทอร์เฟซและคลาสมากมายสำหรับ JUnit การทดสอบ เช่น Test, Assert, After, Before ฯลฯ
ฟิกซ์เจอร์ทดสอบคืออะไร
ก่อนที่เราจะเข้าใจว่าฟิกซ์เจอร์ทดสอบคืออะไร มาศึกษาโค้ดด้านล่างกันก่อน
รหัสนี้ออกแบบมาเพื่อดำเนินการสองกรณีทดสอบในไฟล์ธรรมดา
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 ให้คำอธิบายประกอบที่ช่วยในการตั้งค่าและการรื้อถอน ช่วยให้มั่นใจได้ว่าทรัพยากรจะถูกปล่อยออกมา และระบบทดสอบอยู่ในสถานะพร้อมสำหรับกรณีทดสอบถัดไป
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน JUnit คำอธิบายประกอบจะกล่าวถึงด้านล่าง -
การติดตั้ง
@ก่อน คำอธิบายประกอบใน JUnit ใช้กับวิธีการที่มี Java รหัสที่จะรันก่อนแต่ละกรณีทดสอบ คือมันทำงานก่อนการดำเนินการทดสอบแต่ละครั้ง
การรื้อถอน (โดยไม่คำนึงถึงคำตัดสิน)
@หลังจาก คำอธิบายประกอบถูกใช้ในวิธีการที่มีโค้ด Java เพื่อรันหลังจากแต่ละกรณีทดสอบ วิธีการเหล่านี้จะทำงานแม้ว่าจะมีข้อยกเว้นใดๆ เกิดขึ้นในกรณีทดสอบหรือในกรณีที่การยืนยันล้มเหลว
หมายเหตุ
- อนุญาตให้มีคำอธิบายประกอบจำนวนเท่าใดก็ได้ตามรายการข้างต้น
- วิธีการทั้งหมดที่มีคำอธิบายประกอบด้วย @ก่อน in JUnit จะทำงานก่อนแต่ละกรณีทดสอบ แต่อาจทำงานในลำดับใดก็ได้
- คุณสามารถสืบทอดเมธอด @Before และ @After จากซูเปอร์คลาสได้ Execution จะเป็นดังนี้: เป็นกระบวนการดำเนินการมาตรฐานใน JUnit.
- ดำเนินการ JUnit @Before วิธีการในซูเปอร์คลาส
- ดำเนินการเมธอด @Before ในคลาสนี้
- ดำเนินการเมธอด @Test ในคลาสนี้
- ดำเนินการเมธอด @After ในคลาสนี้
- ดำเนินการเมธอด @After ในซูเปอร์คลาส
ตัวอย่าง: การสร้างคลาสที่มีไฟล์เป็นฟิกซ์เจอร์ทดสอบ
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 } }
ในตัวอย่างข้างต้น ห่วงโซ่การดำเนินการจะเป็นดังนี้-
- createOutputFile()
- ทดสอบไฟล์1()
- ลบไฟล์เอาท์พุต()
- createOutputFile()
- ทดสอบไฟล์2()
- ลบไฟล์เอาท์พุต()
อัสสัมชั:
testFile1() ทำงานก่อน testFile2()– ซึ่งไม่รับประกัน
การตั้งค่าเพียงครั้งเดียว
- เป็นไปได้ที่จะรันเมธอดเพียงครั้งเดียวสำหรับคลาสการทดสอบทั้งหมดก่อนที่จะดำเนินการการทดสอบใดๆ และก่อนหน้าการทดสอบใดๆ @ก่อน วิธีการ
- “การตั้งค่าเพียงครั้งเดียว” มีประโยชน์สำหรับการเริ่มเซิร์ฟเวอร์ การเปิดการสื่อสาร ฯลฯ การปิดและเปิดทรัพยากรอีกครั้งสำหรับการทดสอบแต่ละครั้งใช้เวลานาน
- ซึ่งสามารถทำได้โดยใช้คำอธิบายประกอบ @บีฟอร์คลาส in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
รื้อลงเพียงครั้งเดียว
- เช่นเดียวกับการตั้งค่าครั้งเดียวเท่านั้น ยังมีวิธีการล้างข้อมูลเพียงครั้งเดียวอีกด้วย มันทำงานตามวิธีกรณีทดสอบทั้งหมดและ @หลังจาก คำอธิบายประกอบได้รับการดำเนินการแล้ว
- มีประโยชน์สำหรับการหยุดเซิร์ฟเวอร์ การปิดลิงก์การสื่อสาร ฯลฯ
- สามารถทำได้โดยใช้ @หลังเลิกเรียน คำอธิบายประกอบ
@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()); } }
ในโค้ดข้างต้น "ผลลัพธ์" วัตถุได้รับการประมวลผลเพื่อรับความล้มเหลวและผลลัพธ์ที่ประสบความสำเร็จของกรณีทดสอบที่เรากำลังดำเนินการ
ชื่อจริง JUnit โครงการ
มีความรู้พอสมควรเกี่ยวกับ SDLC, การเขียนโปรแกรม Java และพื้นฐานของ การทดสอบซอฟต์แวร์ กระบวนการช่วยในการทำความเข้าใจ JUnit โครงการ
มาทำความเข้าใจ Unit Testing โดยใช้ตัวอย่างสดกัน เราจำเป็นต้องสร้างคลาสทดสอบด้วยวิธีการทดสอบที่มีคำอธิบายประกอบ @ทดสอบ ตามที่ระบุด้านล่าง:
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
เพื่อดำเนินการตามวิธีทดสอบของเรา (ด้านบน) เราจำเป็นต้องสร้างตัวดำเนินการทดสอบ ใน test runner เราต้องเพิ่มคลาสการทดสอบเป็นพารามิเตอร์ 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 ผ่านการทดสอบและผลลัพธ์เป็นสีเขียว
- หากล้มเหลวก็ควรแสดงผลเป็นสีแดงและสามารถสังเกตความล้มเหลวได้ในการติดตามความล้มเหลว ดูด้านล่าง JUnit กุย :
สรุป
- JUnit เป็นเฟรมเวิร์กที่รองรับคำอธิบายประกอบหลายรายการเพื่อระบุวิธีการที่มีการทดสอบ
- JUnit ให้คำอธิบายประกอบที่เรียกว่า @ทดสอบ, ซึ่งบอกถึง JUnit ว่าวิธีพับสาธารณะที่ใช้สามารถเรียกใช้เป็นกรณีทดสอบได้
- ฟิกซ์เจอร์ทดสอบคือบริบทที่กรณีทดสอบทำงาน
- หากต้องการดำเนินการทดสอบหลายรายการตามลำดับที่ระบุ สามารถทำได้โดยการรวมการทดสอบทั้งหมดไว้ในที่เดียว สถานที่แห่งนี้เรียกว่าเป็นห้องทดสอบ
- JUnit จัดเตรียมเครื่องมือสำหรับดำเนินการทดสอบซึ่งเราสามารถรันกรณีทดสอบของเราที่เรียกว่า Test Runner