junit5
เมื่อประมาณปลายปี 2015 ทีมพัฒนาได้เปิดตัวโปรเจค JUnit Lambda
โดยในปัจจุบันได้เปลี่ยนชื่อมาเป็น JUnit 5

และได้ทำการเปิด alpha version ในเดือนกุมภาพันธ์นี้เอง
ดังนั้น Java Developer มาทำความรู้จัก และ คุ้นเคยกับมันหน่อย

JUnit เป็น test library สำหรับการเขียน test ด้วยภาษา Java

ส่วน Unit 5 นั้น มีเป้าหมายเพื่อทำให้การเขียน test ง่าย และ สะดวกยิ่งขึ้น
โดย feature ใหม่ ๆ จะทำงานได้บน Java 8 ขึ้นไปเท่านั้น
แต่ยังสามารถทำงานร่วมกับ version ต่ำกว่านั้นได้นะ (Backward compattability)

มาลองใช้งาน JUnit 5 กันดีกว่า

โดยตอนนี้เป็น Alpha version ซึ่ง deploy ไว้ที่ Sonatype snapshots repository

โดยแบ่งเป็น library ย่อย ๆ ทำให้ผู้ใช้งานสะดวกมากขึ้น
แต่ก็แลกมาด้วยการศึกษา และ เรียนรู้เพิ่มเติมเช่นกัน
ดังนี้

  • junit-commoms
  • junit-console
  • junit-engine-api
  • junit-gradle
  • junit-launcher
  • junit4-engine
  • junit4-runner
  • junit5-api
  • junit5-engine
  • surefire-junit5

ตัวอย่างของการเขียน test ด้วย JUnit 5
โดยจะเป็น Apache Maven project ซึ่งในไฟล์ pom.xml เป็นดังนี้

จากนั้นเริ่มเขียน test กันเลยดีกว่า

ซึ่งจะเขียนในรูปแบบเดิม แต่สิ่งที่เปลี่ยนไปคือ
package ที่ใช้งานจะเป็น org.junit.gen5
ทำให้ไม่เกิดข้อขัดแย้ง หรือ ตีกับ JUnit 4
นั่นแสดงว่า ทีมพัฒนาก็ยังคิดถึงผู้ใช้งานอยู่นะ

Screen Shot 2559-02-24 at 11.07.28 AM

โดย code เป็นดังนี้

ทำการ run test ด้วย Apache Maven ด้วยคำสั่ง

$mvn clean test

แต่จากการเขียนแบบแรกนี้ จะไม่สามารถใช้ใน IDE ได้ !!
เนื่องจาก IDE ส่วนใหญ่ยังไม่สนับสนุน
ดังนั้น ถ้าต้องการให้สามารถ run ได้ใน IDE
แนะนำให้ใช้ RunWith annotation เข้าไปด้วย
โดย code เป็นดังนี้

แต่ก็ยังมี Bug อยู่อีก !! นั่นคือ
ใน IDE ไม่สามารถเลือก run test case ที่ต้องการได้
ซึ่งต้องรอให้ IDE ต่าง ๆ สนับสนุน JUnit 5 ก่อน
แสดง Error ดังรูป โดยผมใช้ IntelliJ IDE

Screen Shot 2559-02-24 at 11.30.12 AM

มีบาง feature ที่เพิ่มเข้ามา และ เปลี่ยนไป

ยกตัวอย่างเช่น

เปลี่ยนจาก BeforeClass และ AfterClass annotation เป็น BeforeAll และ AfterAll
เปลี่ยนจาก Before และ After annotation เป็น BeforeEach และ AfterEach
ซึ่งผมคิดว่า ชื่อมันสื่อสารถึงหน้าที่การทำงานได้ชัดเจนขึ้นนะ

Tag และ Tags annotation มีไว้เพื่อแบ่งกลุ่มของ test
ซึ่งใน JUnit 4 จะใช้งาน Categories นั่นเอง

Screen Shot 2559-02-24 at 11.41.03 AM

Disabled annotation สำหรับข้าม หรือ ไม่ทดสอบ Test และ Test case
ซึ่งใน JUnit 4 ใช้งาน Ignore

Screen Shot 2559-02-24 at 11.43.29 AM

สามารถแก้ไขชื่อของ Test และ Test case ด้วย DisplayName annotation

Screen Shot 2559-02-24 at 11.51.03 AM

รวมทั้งในส่วนของ Assertion นั้น
สามารถใช้งาน Java 8 Lambda ได้อีกด้วย
เยอะใช้ได้เลยนะ !!

ส่วนเรื่องของ Compatability หรือ ความเข้ากันได้กับ version เก่า ๆ

ตอบได้เลยว่า ยังคงทำงานร่วมกับ version เก่า ๆ ได้
รวมทั้งสามารถทำงานร่วมกับ library อื่น ๆ ได้เช่นเดิม
ยกตัวอย่างเช่น Mockito และ Hamcrest เป็นต้น

สุดท้ายแล้ว JUnit 5 มันกำลังมา

สำหรับ Java Developer ควรทำความรู้จัก และ คุ้นเคยกับมันได้แล้วนะครับ
อ่านเอกสารเพิ่มเติมได้ที่ JUnit 5 documentation

สามารถดูตัวอย่าง source code ทั้งหมดได้ที่ Github::Up1::JUnit5-Demo

Reference Websites
http://junit.org/junit-lambda.html
http://junit-team.github.io/junit5/
https://dzone.com/articles/junit-5-setup
https://github.com/CodeFX-org/demo-junit-5
http://blog.codefx.org/libraries/junit-lambda-prototype/