จากการแบ่งปันเรื่อง การทดสอบ Mobile app ด้วย Appium นั้น
ซึ่งก็มี Flutter app ที่มีปัญหาเยอะพอควร
ซึ่งอธิบายไว้ใน blog บันทึกการแบ่งปันเรื่อง Mobile testing ด้วย Appium
แต่ก็มีคำถามว่า
ถ้าจะให้ทดสอบง่าย ๆ ขึ้นหน่อยทำอย่างไรได้บ้าง
จึงตอบไปดังนี้
คำตอบสั้น ๆ คือ ไม่ทดสอบแบบนี้ไง
เพราะว่าการใช้ Applium + Flutter driver เป็นการทดสอบแบบ external testing
หรือจะเรียกว่า black box หรือ gray box ก็ว่ากันไป
ซึ่งกว่าจะทดสอบได้นั้น ก็มีขั้นตอนที่เยอะ และ ซับซ้อน
แต่ก็มีข้อดีของมัน นั่นคือ เหมือนหรือคล้ายการใช้งานของผู้ใช้งานจริง ๆ นั่นเอง
แต่ถ้าจะให้ดี น่าจะเพิ่มการทดสอบเหล่านี้เข้าไป
ซึ่งใน Flutter ก็อธิบายไว้คือ Testing Flutter App
โดยมีการทดสอบ 3 แบบคือ
- Unit test
- Widget test
- Integration test
ทั้ง 3 แบบนั้น ต้องเขียน code ด้วยภาษา dart + flutter นั่นเอง
ซึ่งผมมองว่าเป็น internal testing หรือ white box ก็แล้วกัน
อาจจะไม่ค่อยสร้างความมั่นใจสักเท่าใด ในมุมมองของผู้ใช้งาน
แต่ผมว่าในมุมมองของนักพัฒนามันสำคัญมาก ๆ
เพื่อช่วยทำให้เรามั่นใจว่า App ที่เราสร้าง หรือ feature ที่เพิ่มเข้ามานั้น
ในแต่ละ feature ยังคงทำงานได้ตามที่เราคาดหวังไว้เสมอ
ก็ที่จะทำการ build app ต่อไปอีกที
โดยตัวที่ผมมักให้แต่ละคนเริ่มเขียนมากที่สุดคือ Widget test
เพื่อช่วยให้เข้าใจการออกแบบ และ ทำงานของแต่ละ Widget
ก่อนที่จะนำหลาย ๆ Widget มาประกอบ และ ทำงานร่วมกัน
ดังนั้น ตั้งแต่การสร้าง เมื่อเกิด event/action ใด ๆ กับ Widget
เราสามารถทดสอบได้หมดผ่าน WidgetTester
ส่วนพวก Dependency ต่าง ๆ ก็สามารถใช้งาน Mock library ได้
เช่น Mockito เป็นต้น
อาจจะวุ่นวายหน่อยในช่วงแรก
แต่จะทำให้เราเข้าใจการทำงานของ Widget
รวมทั้งสามารถกำหนดขอบเขตการทำงานของกลุ่ม Widget ที่เราต้องการอีกด้วย
ไม่ใช่เขียน หรือ สร้างไปเรื่อย ๆ แล้วหวังว่าจะทำงานได้ตามที่เราต้องการ
เมื่อ Widget test ผ่านแล้ว ก็มาถึงการทดสอบแบบ Integration test
เป็นการทดสอบแบบผ่าน device หรือ emulator/simulator เลย
เป็นการทดสอบในภาพรวมการทำงานของ App กันเลย
ดังนั้นจึงน่าจะทำให้เชื่อมั่นขึ้นมาอีก
แต่แน่นอนว่า ก็จะช้าลงไปอีก จึงต้องทำความเข้าใจว่า เราจะทดสอบ flow อะไรบ้าง
เน้นย้ำว่า ทั้ง 3 แบบการทดสอบนั้น จำเป็นต้องเขียน code
ดังนั้นจำเป็นต้องฝึก skill การ coding ด้วยภาษา dart และ flutter กันด้วย
อย่างไปกลัวว่าต้องเขียน code เพราะว่ายังไงก็หนีไม่พ้น
ส่วนคนที่เขียน code ก็มาเพิ่ม skill การทดสอบกันด้วย
น่าจะช่วยให้เราป้องกันไม่ให้เกิด bug หรือ ข้อผิดพลาดได้อย่างรวดเร็ว
แต่ถ้าเกิดข้อผิดพลาดแล้ว เราจะไม่ผิดซ้ำที่เดิมอีกต่อไป