การเขียน Test หรือชุดการทดสอบนั้นเป็นสิ่งที่ดี
เริ่มเขียนว่ายากแล้ว การเขียนให้ดียากยิ่งกว่า
ดังนั้นจึงสรุปวิธีปรับปรุงการเขียน Test ให้ดีขึ้น
โดยนำมาจากบทความเรื่อง Write Better Tests in 5 Steps
เริ่มกันเลย
Code ของ Test นั้นต้องดูแลให้เหมือนกับ Production code
นั่นหมายความว่า ถ้าเขียน Test แล้วต้องดูแลเป็นอย่างดี ให้เหมือนกับ code ของระบบงาน ใช้แนวปฏิบัติเหมือนกัน โดย feature ต่าง ๆ ที่ดีของระบบ ควรมีชุด Test code ที่อ่านและทำความเข้าใจได้ง่าย (Readability test) เพื่ออธิบายการทำงานของ code เพื่ออธิบาย business rule ว่าสร้างหรือทำงานอย่างไร เพื่อช่วยให้หาปัญหาได้ง่ายขึ้น รวมทั้งต้องไม่มี Test ที่ซ้ำซ้อนด้วยวางโครงสร้างของ Test code ให้ดี
ในแต่ละ test case ควรมีโครงสร้างเดียวกัน หรือ ไปในทางเดียวกัน เพื่อช่วยทำให้ Test อ่านและทำความเข้าใจได้ง่ายขึ้น สิ่งชอบใช้คือ AAA (Arrange-Act-Assert)- Arrange เป็นการเตรียมสิ่งต่าง ๆ ก่อนการทดสอบ เช่นข้อมูลเริ่มต้นของการทดสอบ
- Act เป็นการสร้าง action หรือเรียกใช้งานส่วนที่ต้องการทดสอบ
- Assert ทำการตรวจสอบผลจากการทดสอบ ว่าเป็นไปตามที่คาดหวังหรือไม่
ดูแล Test ให้มีสุขภาพที่ดี ระวัง Test ที่ไม่เสถียร !!
ปัญหาที่มักเจอกับ Test คือ บางครั้งผลการทดสอบผ่าน บางครั้งผลการทดสอบไม่ผ่าน ทั้ง ๆ ที่ไม่ได้แก้ไขอะไร ส่งผลให้ความน่าเชื่อถือของ Test ลดลงอย่างต่อเนื่อง เป็นอีกสาเหตุทำให้เลิกเขียน Test !! ดังนั้นถ้ามี Test ในรูปแบบนี้ ให้หยุด และ หาสาเหตุว่าต้นเหตุเกิดจากอะไร จากนั้นลงมือแก้ไข อย่าปล่อยให้ลอยนวล หรือปล่อยไปก่อน !!เลือกระดับหรือชนิดการ Test ให้ถูกต้องและเหมาะสม
การ Test นั้นมีหลายระดับหลายชนิด แต่ละชนิดล้วนมีค่าใช้จ่ายด้วยกันทั้งสิ้น ทั้งการเขียน ทั้งเวลาในการทดสอบ ยกตัวอย่างเช่น ถ้าทำการทดสอบ UI Test เพียงอย่างเดียว เมื่อชุดการทดสอบเยอะขึ้น ต้องใช้เวลาในการทดสอบมากขึ้น ค่าใช้จ่ายเพื่อทำให้เร็วขึ้นก็สูงมาก ๆ ดังนั้นควรต้อง Test ในส่วนอื่น ๆ ด้วย เช่น Unit test และ Service test มากขึ้น แต่ถ้ายังไม่รู้ ก็จัดเต็มทุกส่วนเลย เพื่อทำให้รู้และเข้าใจว่า อะไรควรหรือไม่ควรทำ !!ต้องเรียนรู้เทคนิคต่าง ๆ ในการ Test เพิ่มเติม
ยกตัวอย่างเช่นการ Mock หรือ Test Double เพื่อช่วยลดค่าใช้จ่ายหรือเวลาในการ Test ลงไป แต่ก็ต้องแลกมาด้วยการออกแบบระบบงานด้วย นั่นคือระบบจะต้องสามารถทดสอบได้ง่าย (Testable Architecture) ยกตัวอย่าง การจำลอง Database การจำลอง REST API server การใช้งาน Stub/Spy/Mock สำหรับการตัด dependency ต่าง ๆ ออกไปจาก code การจำลอง Environment สำหรับการทดสอบขึ้นมา เป้าหมายเพื่อ Fast feedback คือรูปผลการเปลี่ยนแปลงได้อย่างรวดเร็ว นั่นคือการลดค่าใช้จ่ายนั่นเองลองแบ่งเวลามาเขียนและปรับปรุง Test กันเถอะ เพื่อสร้างระบบงานดีให้ผู้ใช้งานและลูกค้า รวมทั้งช่วยให้ทีมมีความเชื่อมั่นเมื่อทำการแก้ไขและดูแลระบบ รวมทั้งรู้ปัญหาได้อย่างรวดเร็วReference Websites http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/ https://martinfowler.com/articles/nonDeterminism.html http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html https://www.thoughtworks.com/insights/blog/just-re-run-build-it-should-go-green http://xunitpatterns.com/Fragile%20Test.html