โดยปกติการทดสอบในระดับ integration test และ component นั้น
มักจะทดสอบผ่านระบบจริง ๆ ซึ่งควบคุมได้ยาก
ยกตัวอย่างเช่น การทดสอบกับ Database, Data store
รวมไปถึงการทดสอบระดับ UI/Acceptance test ซึ่งต้องทดสอบผ่าน browser
แน่นอนว่า การจัดการนั้นไม่ง่ายเลย

แต่เมื่อเข้าสู่ยุคของ container แล้วนั้น
เรื่องต่าง ๆ เหล่านี้จะง่ายขึ้น แต่แลกมาด้วยการเรียนรู้และเครื่องที่แรงขึ้น
หนึ่งในเครื่องมือนั้นคือ Test containers
ซึ่งเป็น library ที่พัฒนาด้วยภาษา Java 1.8
ที่สำคัญคือ ใช้งานร่วมกับ JUnit ได้เลย
เหมาะมากสำหรับการทดสอบระบบงาน

ปล. เครื่องทดสอบต้องติดตั้ง Docker 17.06 ด้วยนะ และ JDK 1.8 ขึ้นไป

ดังนั้นมาเริ่มใช้งานกันหน่อย
น่าจะเป็นอีกหนึ่งแนวทางสำหรับการพัฒนาและทดสอบระบบงาน
ให้มีคุณภาพและลดความเสี่ยงต่าง ๆ ลงไป

ยกตัวอย่างการใช้งานกับ Spring Boot

สำหรับการทำงานร่วมกับ Database ผ่าน Spring Data JPA
ปกติเราสามารถทดสอบผ่าน @DataJpaTest ได้เลย
ซึ่งนั่นก็คือการทดสอบผ่าน Embedded database เช่น H2 เป็นต้น

แต่ว่า Database จริง ๆ ไม่ใช่ Embedded database แน่นอน
ยกตัวอย่างเช่น MySQL และ PostgreSQL เป็นต้น
ซึ่งอาจจะส่งผลให้การทดสอบผิดพลาดหรือต่างไปจากของจริงก็เป็นไปได้มาก
ดังนั้นถ้าใช้ Database จริง ๆ เหมือนกับ production กันเลยไหม
โดยสามารถใช้ผ่าน Test container ได้ดังนี้

ขั้นตอนที่ 1 เพิ่ม dependency หรือ libray ของ Test containers เข้าไปก่อน

ขั้นตอนที่ 2 ทำการกำหนด Image ของ database ที่ต้องการใช้ผ่าน Test containers
เลือกใช้งาน PostgeSQL
รวมทั้งกำหนดชื่อฐานข้อมูลและ username/password ให้เรียบร้อย
ผ่านส่วนของ @ClassRule ของ Unit ดังนี้

ขั้นตอนที่ 3 ทำการกำหนด class Initialzer สำหรับ Spring Boot
เพื่อให้ชุดการทดสอบไปเรียกใช้งาน Database ที่เรากำหนดไว้ในขั้นตอนที่ 2

ขั้นตอนที่ 4 เขียนชุดการทดสอบและ run มันซะ

เพียงเท่านี้เราก็สามารถทดสอบระบบผ่าน Test containers ได้แล้ว
ซึ่งง่ายขึ้นเยอะเลย แต่มันยังเป็น alpha version อยู่นะ
ขอให้สนุกกับการ coding ครับ