Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาเตรียมความพร้อมสำหรับ JUnit 5 กัน

$
0
0

junit5

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 เป็นดังนี้ [gist id="b8b85155e80c031fa8b4" file="pom.xml"]

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

ซึ่งจะเขียนในรูปแบบเดิม แต่สิ่งที่เปลี่ยนไปคือ package ที่ใช้งานจะเป็น org.junit.gen5 ทำให้ไม่เกิดข้อขัดแย้ง หรือ ตีกับ JUnit 4 นั่นแสดงว่า ทีมพัฒนาก็ยังคิดถึงผู้ใช้งานอยู่นะ
Screen Shot 2559-02-24 at 11.07.28 AM โดย code เป็นดังนี้ [gist id="b8b85155e80c031fa8b4" file="HelloWorldTest.java"] ทำการ run test ด้วย Apache Maven ด้วยคำสั่ง [code]$mvn clean test[/code] แต่จากการเขียนแบบแรกนี้ จะไม่สามารถใช้ใน IDE ได้ !! เนื่องจาก IDE ส่วนใหญ่ยังไม่สนับสนุน ดังนั้น ถ้าต้องการให้สามารถ run ได้ใน IDE แนะนำให้ใช้ RunWith annotation เข้าไปด้วย โดย code เป็นดังนี้ [gist id="b8b85155e80c031fa8b4" file="HelloWorldTestRunWithJUnit5.java"] แต่ก็ยังมี 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/

Viewing all articles
Browse latest Browse all 1997

Trending Articles