ในที่นี้เป็นการใช้ JUnit ซึ่งเป็น Java API ที่เป็นเฟรมเวิร์คที่ช่วยให้เราทดสอบได้อย่างอัตโนมัติในแบบ Four Phrase Test
เราเรียกใช้งาน JUnit โดยไปที่ไฟล์คลาสที่ต้องการทำสอบ คลิกที่ชื่อคลาสให้เป็นไฮไลท์ กดปุ่ม Alt+Enter และเลือก Creat Test
โปรแกรมจะสอบถามไดเร็คทอรี่ที่ต้องการให้บันทึกไฟล์สำหรับทดสอบ ให้เลือก OK
จากนั้นโปรแกรมจะแสดงหน้าต่างให้เราเลือกเครื่องมือในการทดสอบ โดยในช่อง Testing Library ให้เลือก JUnit เวอร์ชั่นล่าสุด (แต่ในกรณีที่โปรแกรมถูกพัฒนาขึ้นมาและผ่านการทดสอบด้วย JUnit เวอร์ชั่นที่เก่ากว่า ให้เลือกเวอร์ชั่นนั้นเพราะอาจจะทดสอบด้วย JUnit เวอร์ชั่นล่าสุดไม่ผ่าน) และเลือกทุกเมธอดที่ต้องการทดสอบจากกรอบด้านล่าง
JUnit จะสร้างไฟล์เพื่อการทดสอบขึ้นมาในชื่อเดียวกับคลาสและตามด้วยข้อความ Test
จะเห็นว่าข้อความ junit เป็นสีแดงเนื่องจากเรายังไม่ได้เพิ่มไลบรารี่ของ JUnit เข้ามาในโครงการของเรา ให้คลิกที่ข้อความ junit ที่เป็นสีแดง แล้วกด Alt + Enter และเลือก Add ‘JUnit xxxxx’ to classpath โดยเลือกเวอร์ชั่นตามที่เราเลือกในขั้นตอนสร้างไฟล์ทดสอบ
โปรแกรมให้เลือกว่าใช้ไลบรารี่จากแหล่งใด เลือกแหล่งที่มาที่เป็น IntelliJ IDEA (ถ้ามี) หรือแหล่งอื่นตามเวอร์ชั่นที่เราจะใช้
จะเห็นว่าสีแดงตรงคำอธิบาย (annotation) จะหายไป และถ้าเราไปดูที่ External Libraries ในหน้าต่างโครงการจะเห็นว่ามีไลบรารี่ของ JUnit เพิ่มเข้ามา คำอธิบาย (annotation) นี้เป็นตัวบอก JUnit ว่าเราจะทดสอบเมธอดใดบ้าง เมธอดใดที่ไม่มีคำอธิบายกำกับจะไม่ถูกทดสอบ คำอธิบายนี้จะมีโดเมนแตกต่างกันไปตามแต่ไลบรารี่ของ JUnit ที่เราเลือกใช้แต่คำสั่งด้านท้ายจะเหมือนกัน
จากนั้นเราจะสร้าง run configuration ของการทดสอบเพื่อใช้ในการ run ทดสอบโปรแกรมโดยคลิกขวาที่บรรทัดสุดท้ายของคลาส (คลิกอย่าให้โดนขอบเขตของเมธอด) แล้วเลือก Modify Run Configuration…
ที่หน้าต่าง Create Run Configuration เลือก Apply และเลือก OK จะได้ run configuration ของการทดสอบแสดงที่มุมบนขวาเพิ่มขึ้นมาจากเดิมที่มีแค่ Main
ในการทดสอบเราจะต้องกำหนดเงื่อนไขในการทดสอบในบล๊อกของเมธอด หากเราไม่กำหนดและเริ่มการทดสอบ ระบบจะแจ้งว่าทดสอบผ่าน (เพราะว่าไม่ได้ทดสอบอะไร) ดังนั้นเราจะเพิ่มบรรทัดคำสั่ง fail (“Please implemnet test.”) ในแต่ละเมธอดเพื่อเตือนว่าเรายังไม่ได้กำหนดเงื่อนไขการทดสอบสำหรับแต่ละเมธอด
ในการ run เพื่อทดสอบเราจะเลือก run configuration ของคลาสทดสอบที่กำหนดไว้ จากมุมบนขวา
เมื่อเรา run ทดสอบแล้ว ที่ด้านล่างจะแสดงหน้าต่างของผลการทดสอบ โดยหน้าต่างด้านซ้ายจะแสดงคลาสและเมธอดที่เราทำการทดสอบ ซึ่งเราสามารถคลิกเพื่อเลือกแสดงรายละเอียดเฉพาะผลการทดสอบของคลาสหรือเมธอดได้
ส่วนหน้าต่างด้านขวาจะเป็นรายละเอียดผลการทดสอบ และด้านบนของหน้าต่างด้านขวาจะเป็นผลการทดสอบ ซึ่งในที่นี้คือ Tests failed: 2 เพราะเราใช้คำสั่ง fail() บังคับให้เกิดข้อผิดพลาด
การกำหนดเงื่อนในการทดสอบในแต่ละเมธอดจะต้องจบเบ็ดเสร็จในเมธอดนั้นๆและไม่สามารถอ้างอิงผลลัพธ์หรือตัวแปรจากเมธอดอื่น จากตัวอย่างด้านล่างเมธอดเราต้องสร้างออบเจกต์ขึ้นมาเพื่อการใช้งาน ดังนั้นการเขียนเงื่อนไขในแต่ละเมธอดก็จะต้องกำหนดการสร้างออบเจกต์ของใครของมัน ในการตรวจสอบผลเราใช้เมธอด assertEquals(ค่าที่คาดหวัง, ผลลัพธ์จากเมธอด)
เมื่อ run โปรแกรม ทางกรอบด้านซ้ายจะแสดงเครื่องหมายถูกหน้าแต่ละเมธอดว่าการทดสอบผ่าน และจะเห็นผลการทดสอบที่ด้านบนของหน้าต่างขวา
ตัวอย่างด้านล่างคือในกรณีที่มีบางเมธอดทดสอบไม่ผ่าน
เมธอด assert… คือการยืนยันผลการทดสอบโดยเปรียบเทียบผลลัพธ์ที่ได้กับค่าที่คาดไว้ เมธอด assert… จะมีหลายแบบ เช่น
assertEquals() ใช้เพื่อเปรียบเทียบว่าผลลัพธ์ตรงกับค่าที่กำหนดไว้ ถ้าเราใช้เปรียบเทียบออบเจกต์จะหมายถึงออบเกจต์ทั้งสองจะต้องเป็นออบเจกต์เดียวกัน assertEquals() เปรียบเทียบออบเจกต์โดยใช้เมธอด equals()
assertNoEquals() ใช้เพื่อเปรียบเทียบว่าผลลัพธ์ไม่ตรงกับค่าที่กำหนดไว้
assertArrayEquals() ใช้เพื่อเปรียบเทียบผลลัพธ์กับค่าที่กำหนดไว้ในรูปแบบอาเรย์ โดยอาเรย์จะเท่ากันก็ต่อเมื่อมีขนาดเท่ากันและแต่ละสมาชิกในอาเรย์ก็ต้องเท่ากันและเรียงลำดับเหมือนกันด้วย
assertNull() และ assertNotNull() ใช้เพื่อเปรียบเทียบว่าผลลัพธ์เป็น null หรือ not null
assertSame() และ assertNotSame() ใช้เพื่อเปรียบเทียบผลลัพธ์กับค่าที่กำหนดที่เป็นออบเจกต์โดยจะเปรียบเทียบค่าอ้างอิงของเจกต์
assertThat() ใช้เพื่อเปรียบเทียบผลลัพธ์กับช่วงของค่าที่กำหนด การเปรียบเทียบทำโดยใช้ matcher ของ JUnit API โดยจะมีมาใน JUnit เวอร์ชั่น 4.4 เป็นต้นไป
นอกจากคำอธิบาย @org.junit.jupiter.api.Test แล้วยังมีคำอธิบายอื่นๆที่ช่วยให้เราทำงานได้สะดวกขึ้น เช่น ในกรณีที่เราต้องจัดเตรียมสิ่งแวดล้อมเพื่อการทดสอบอย่างการสร้างออบเจกต์ การกำหนดค่าให้ตัวแปรจำนวนมาก ถ้าต้องทำในทุกเมธอดอาจจะเกิดผิดพลาดได้ ดังนั้นเราสามารถดึงเอาส่วนที่ทำซ้ำๆเหล่านั้นมากำหนดในที่เดียวและให้ทุกเมธอดเรียกใช้ก่อนการทดสอบได้โดยกำกับด้วยคำอธิบาย @org.junit.jupiter.api.BeforeEach จากตัวอย่างด้านล่างเป็นการดึงเอาการสร้างออบเจกต์ออกมาไว้ที่เมธอด setup() อย่างไรก็ตามการใช้งานยังคงต้องคำนึงถึงโครงสร้างของภาษาจาวา เช่น เราต้องสร้างฟิลด์ในระดับคลาส ส่วนการสร้างออบเจกต์และการกำหนดค่าสามารถอยู่ในเมธอด setup() ได้
จากตัวอย่างด้านล่างเราดึงเอาการสร้างออบเจกต์ NumberArrayTest จากเดิมที่อยู่ในแต่ละเมธอดที่ต้องการทดสอบมาสร้างฟิลด์ในระดับคลาส แล้วสร้างเมธอด setup() เพื่อสร้างออบเจกต์ NumberArrayTest และกำกับเมธอด setup() ด้วย @org.junit.jupiter.api.BeforeEach ซึ่งหมายถึงให้เมธอดนี้ทำงานก่อนการทดสอบของทุกๆเมธอดที่ต้องการทดสอบ
ในกรณีที่เราต้องการทดสอบด้วยค่าหลายๆค่า แทนที่จะต้องสร้างเมธอดซ้ำๆกันหลายอัน เราสามารถใช้คำอธิบาย @ParameterizedTest เพื่อบอกว่าเมธอดจะถูกทดสอบด้วยค่าที่ส่งให้ และกำหนดค่าและผลลัพธ์ที่ต้องการด้วย @CsvSource จากตัวอย่างด้านล่าง เรากำหนดชุดของค่าตั้งต้นและผลลัพธ์ที่ต้องการ และกำหนดพารามิเตอร์ที่เมธอดเพื่อรับค่าไปใช้
ซึ่งผลลัพธ์ที่ได้จะแสดงรายละเอียดของชุดข้อมูลที่เราใช้ด้วย