แยก Unit Test กับ Integration Test ใน Java ด้วย Maven

การทำยูนิตเทสต์ด้วยจาวา ควรจะแยกเทสต์เคส (Test Case) ที่ต้องติดต่อข้ามโปรเจคท์ หรือข้ามคอมโพเนนท์ ไปเป็นอินทิเกรชั่นเทสต์ แทนยูนิตเทสต์ ถึงแม้จะใช้เจยูนิตในการทำก็ตาม เพราะโดยส่วนมากอินทิเกรชั่นเทสต์นั้นจะใช้เวลานานกว่า ไม่เหมาะที่จะรันบ่อยๆ

เมเว่น (Maven) ได้กำหนดเฟสการเทสต์ 2 แบบนี้แยกจากกันไว้อยู่แล้ว โดยยูนิตเทสต์จะถูกรันในเฟสเทสต์ (mvn test) ส่วนอินทิเกรชั่นเทสต์จะถูกรันในเฟสเวอริฟาย (mvn verify) ค่าเริ่มต้นนั้น อินทิเกรชั่นเทสต์จะไม่ได้กำหนดให้ทำงาน

ถ้าต้องการใช้เมเว่นในการทำเทสต์

  1. เพิ่มปลั๊กอินเฟลเซฟ (maven-failsafe-plugin) เข้าไปในส่วน <build> ของ pom.xml
  2. แยกชนิดการเทสต์ด้วยชื่อคลาส
    • **/*Test.java คือ ยูนิตเทส
    • **/*IT.java คือ อินทิเกรชั่นเทสต์
  3. รัน mvn test เมื่อต้องการรันยูนิตเทสต์ และ mvn verify เมื่อต้องการรันอินทิเกรชั่นเทสต์

อย่าลืมว่าอินทิเกรชั่นเทสต์นั้นจะต้องผ่านยูนิตเทสต์ก่อนจึงจะรันได้นะ

ที่มา: http://maven.apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.html

สแลช (Slash)

ใช้ Mockito ทำ Unit Test ง่ายๆ

แน่นอนว่าการทำยูนิตเทสต์ (Unit Test) ด้วยจาวา (Java) ต้องใช้เจยูนิต (JUnit) แต่ในการทำทีดีดี (TDD: Test-Driven Development) การเทสต์ให้ครอบคลุมซอร์สโค้ดทั้งหมดนั้นสำคัญ ซึ่งเป็นเรื่องยากในภาษาอื่นๆ อย่างเช่นซีพลัสๆ (C++) แต่ในโลกของจาวานั้น มีม็อคคิโต (Mockito) ที่ทำงานร่วมกับเจยูนิตได้ง่าย

พื้นฐานม็อคคิโตอย่างง่ายๆ

  1. ใช้ @Mock เพื่อจำลองพฤติกรรมของวัตถุนั้นทั้งกระบวนการ ด้วยคำสั่ง when()
  2. ใช้ @Spy เพื่อให้วัตถุนั้นทำงานจริงแต่เปลี่ยนพฤติกรรมบางเม็ทเถิด (method) ได้
  3. ใช้ @Captor เพื่อเก็บข้อมูลจากการประมวลผลเอาไปเปรียบเทียบกับค่าที่เราต้องการได้
  4. ใช้ verify() เพื่อพิสูจน์ว่ามีการเรียกใช้เม็ทเถิดนั้นๆหรือไม่
  5. ถ้าจะใช้แอนโนเทชั่น (Annotation) เหล่านี้ จะต้องแอนโนเถต (Annotate) เจยูนิตคลาสด้วย @RunWith(MockitoJUnitRunner.class)

มาทำ ทีดีดี ที่ครอบคลุมซอร์สโค้ด 100% กันเถอะ

สแลช (SLASH)

ใช้ SSH ผ่าน SOCKS Proxy

ที่ทำงานส่วนใหญ่มักจะไม่อนุญาตให้ใช้เซเคียวร์เชลล์ (SSH) ไปเว็บไซต์ภายนอก ทั้งการใช้งานรีโมทเชลล์ (remote shell) หรือกิต (git) ถ้าที่ทำงานมีซ็อกซ์พร็อกซี่ (SOCKS Proxy) ให้ ก็พอมีทางเป็นไปได้ โดยถ้าใช้ระบบลินิกซ์ (Linux) ก็อาจจะมีวิธีปรับแต่งง่ายหน่อย แต่ถ้าเป็นวินโดวส์ (Windows) ต้องใช้แรงนิดนึง

วิธีการใช้งานเซเคียวร์เชลล์ผ่านซ็อกซ์พร็อกซี่

  1. ติดตั้งโปรแกรมคอนเน็กท์ (connect.exe)
  2. ตั้งค่าในไฟล์ <โฮม>\.ssh\config ดังนี้

Host <ชื่อเซิร์ฟเวอร์>
    User                    git
    ProxyCommand            connect -S <ชื่อซ็อกซ์พร็อกซี่>:1080 %h %p

เท่านี้ก็สามารถใช้งานได้ ไม่ว่าจะผ่านคอมมานด์ไลน์ (command line) หรือพุตตี้ (PuTTY)

ที่มา

สแลช (Slash)