Screenshot

จากการแบ่งปันเรื่องของการทดสอบ ไม่ว่าจะเป็น manual หรือ automated
จะให้ความสำคัญกับ test ที่ดีมาก ๆ
ยกตัวอย่างเช่น F.I.R.S.T principle เป็นต้น
โดยปัญหาหนึ่งของการทดสอบคือ ไม่จบในตัวเอง
หรือไม่เป็นอิสระจากส่วนอื่น ๆ ไม่ว่าจะเป็น test case อื่น ๆ ไม่ว่าจะการเตรียม data
และ external system (database, caching, messaging และ external api เป็นต้น)
ส่งผลทำให้การทดสอบไม่เสถียร หรือผ่านบ้าง ไม่ผ่านบ้าง ทั้ง ๆ ที่ไม่ได้แก้ไขอะไรเลย !!

ไม่ว่าจะทดสอบใน level ไหน สามารถประยุกต์ใช้ได้ทั้งหมด

ยกตัวอย่างของ test case ที่มีปัญหา แต่ดันเจอบ่อย ๆ

เขียน test case ด้วย NodeJS + Jest แบบง่าย ๆ ได้ดังนี้

จะเห็นได้ว่าจะต้องเรียงตามลำดับเสมอ คือ

  • seed data หรือเตรียม data สำหรับการทดสอบทุก ๆ test case
  • ทำการตรวจสอบข้อมูลใน database
  • ทำการแก้ไขข้อมูล
  • ทำการลบข้อมูล

ปัญหาที่ตามมาคือ จะต้องทดสอบเรียงลำดับเสมอ (sequential process)
ทำให้เวลาในการทดสอบสูงขึ้นเรื่อย ๆ
ไม่สามารถทำการทดสอบแบบ parallel ได้แน่นอน
รวมทั้งถ้าในขั้นตอนแรก ๆ มีปัญหา หรือ ไม่ผ่าน อาจจะส่งผลต่อ test อื่น ๆ อีก
ยิ่งถ้า seed data มีปัญหา ยิ่งซวยไปใหญ่ !!

ดังนั้นควรจัดการข้อมูลแยกไปแต่ละ test case ไปเลยดีกว่า

ที่สำคัญในการเตรียม data สำหรับการทดสอบมีหลายวิธี
อยู่ที่ความต้องการของการทดสอบนั้น ๆ เอง เช่น

  • ทำการ mock หรือ stub หรือ fake ไปเลยก็ได้
  • ทำการ setup ข้อมูลจริง ๆ เลย เช่นทำผ่าน data factory และ test container ไปเลย สำหรับ integration test
  • หรือสามารถทำการจัดการตามที่เราต้องการ เช่น database ต่อจริงไปเลย ส่วน caching, messaging ทำการ mock ไปเลยเป็นต้น แน่นอนว่าตรวนี้ต้องวางแผนและออกแบบก่อนเสมอ

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

เพียงเท่านี้ ก็สามารถจัดการ test case ให้จบในตัวเองได้เลย
จะช่วยทำให้ test case ต่าง ๆ มีความน่าเชื่อมากยิ่งขึ้น
และ test case จะอธิบายตัวมันเองด้วยว่า ทำงานร่วมกับระบบอะไรบ้าง อย่างไร

ลองปรับปรุงการทดสอบดูครับ
รู้ว่ามันไม่ง่าย แต่ถ้าไม่ปรับปรุงหรือเปลี่ยนแปลง ก็จะมีปัญหาเช่นเดิม

ปล. แต่เรามักจะขยันหาเหตุผลมากมาย เพื่อไม่ทำอีก !!