เครื่องมือที่ใช้ JUnit4.8.1 on Eclipse SDK3.5.2 ขึ้นไป Unit Testing (Lab 6) เครื่องมือที่ใช้ JUnit4.8.1 on Eclipse SDK3.5.2 ขึ้นไป โดย ผศ.ดร.วรารัตน์ สงฆ์แป้น(รุ่งวรวุฒิ) รายวิชา 322 235 Software Testing ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น
เกี่ยวกับ Junit เครื่องมือที่ใช้ช่วยในการทำ Unit test สำหรับภาษา Java เขียนโดย Erich Gamma และ Kent Beck เป็น framework เป็น open source
ประโยชน์ของ Junit เป็น framework ที่เป็นมาตรฐานที่จะช่วยให้การทำงานของ code มีประสิทธิภาพมากขึ้น สามารถทำงานแบบอัตโนมัติ สามารถทดสอบได้บ่อยเท่าที่ต้องการ ไม่มีผลกระทบต่อภายในโปรแกรมเพราะว่าทดสอบเฉพาะส่วน Input และ Output ของโปรแกรมเท่านั้น หมายเหตุ ความเข้าใจผิดสำหรับ Junit คือ ไม่ได้ช่วยแก้ bug แต่ช่วยหา ข้อบกพร่องของ code ที่ programmer เขียนเอาไว้
เริ่มทำปฏิบัติการทดสอบ สมมติว่าเราต้องการทดสอบ โปรแกรมการตัดเกรด Grade.java public class Grade { public static char getLetterGrade(int mark) { if (mark >= 75) { return 'A'; } else if (mark >= 60) { return 'B'; } else if (mark > 50) { return 'C'; } else if (mark >= 30) { return 'D'; } else { return 'F'; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.print(getLetterGrade(70)); 1 2 1 2 3 4 5 6 7 8 9 10 11 12 3 4 5 6 7 8 9 10 11 12
เริ่มทำปฏิบัติการทดสอบ สร้างโปรแกรมที่ใช้ในการทดสอบ สมมติตั้งชื่อเป็น GradeUnitTest.java import static org.junit.Assert.*; import org.junit.Test; public class GradeUnitTest { @Test public void testTypical() { // test a typical value in partitions EC assertEquals('A', Grade.getLetterGrade(95)); assertEquals('B', Grade.getLetterGrade(72)); assertEquals('C', Grade.getLetterGrade(55)); assertEquals('C', Grade.getLetterGrade(30)); assertEquals('F', Grade.getLetterGrade(20)); } public void testEC() { // test the boundaries of the partitions EC assertEquals('A', Grade.getLetterGrade(100)); assertEquals('A', Grade.getLetterGrade(75)); assertEquals('B', Grade.getLetterGrade(74)); assertEquals('B', Grade.getLetterGrade(60)); assertEquals('C', Grade.getLetterGrade(59)); assertEquals('C', Grade.getLetterGrade(50)); assertEquals('D', Grade.getLetterGrade(49)); assertEquals('D', Grade.getLetterGrade(30)); assertEquals('F', Grade.getLetterGrade(29)); assertEquals('F', Grade.getLetterGrade(0)); }
บริเวณที่บอกชุดการทดสอบว่าผ่านหรือไม่
ติดตั้งโปรแกรมที่ช่วยตรวจสอบ Path Testing (Java Code Coverage) ให้เข้าไปติดตั้ง Eclipse เวอร์ชั่น 3.5 ขึ้นไป จากนั้นติดตั้งเครื่องมือช่วยในการตรวจสอบโค้ด http://www.eclemma.org/installation.html
คำถาม 1: ให้ทำการตรวจสอบโปรแกรมว่าทำไมเกิด Defects เกิดขึ้นที่บริเวณดังกล่าว และแก้ไขจนกระทั่ง Junit test เป็นสีเขียวคือผ่านทั้งหมด คำถาม 2: ให้จดบันทึกว่าเมื่อรัน EclEmma ก่อนและหลังรันโปรแกรมว่า Code Coverage กี่เปอร์เซ็นต์
บริเวณที่บอกชุดการทดสอบผ่านทุกชุดทดสอบ
เมท็อดที่ใช้ในการทดสอบ Assert Method เป็น method หนึ่งใน JUnit ที่มีประโยชน์มากในการช่วยตรวจสอบ Test case ของเราซึ่งจะแจ้งเตือนทันทีเมื่อเรา run test แล้วผลที่ออกมาไม่ตรงกับที่ เราคาดหวัง ชื่อ assert ผลลัพธ์ที่คาดหวัง assertTrue() เมื่อเราคาดหวังให้ผลลัพธ์เป็น true assertFalse() เมื่อเราคาดหวังให้ผลลัพธ์เป็น false assertNull() เมื่อเราคาดหวังให้ผลลัพธ์เป็น null assertNotNull() เมื่อเราคาดหวังให้ผลลัพธ์ไม่เป็น null assertEquals() เมื่อเราคาดหวังให้ผลลัพธ์ออกมาเท่ากัน assertSame() เมื่อเราคาดหวังให้ผลลัพธ์ออกมาเป็นobject เดียวกัน assertNotSame() เมื่อเราคาดหวังให้ผลลัพธ์ออกมาเป็นคนละobjectกัน Fail() เมื่อเราคาดหวังให้ผลลัพธ์ออกมาเป็นFail เสมอ
ฝึกปฎิบัติเพิ่มเติม ให้ทำการสร้าง Project การเทสโปรแกรม Calculate หน้า 41 ใน sheet lab chapter 6 และสร้างโปรแกรม Test จาก Junit ตามตารางเทสเคสหน้า 45 นศ ใช้ EclEmma ในตรวจสอบเทสเคสจาก Junit ที่สร้าง ขึ้นได้กี่เปอร์เซ็นต์