June 27, 2016

ทำให้ Helper function ใน XCTest บอกตำแหน่งที่ Fail

หลังจากที่เราเขียนโค้ด test ไปเรื่อยๆ จะพบว่าหลายๆ case ที่ทดสอบนั้นจะมี Assertion ที่คล้าย หรือซ้ำกันเกิดขึ้น ทำให้บางทีเราจำเป็นต้องตัดสินใจแยกออกมาเป็น function ย่อยๆ ให้แต่ละ case ได้เรียกใช้งานร่วมกัน แต่ปัญหาก็คือ เมื่อ Test Fail เกิดขึ้นใน function เหล่านั้น เราไม่สามารถบอกได้ว่า test function ไหน fail เพราะ Xcode ดันไป highlight error ใน helper function แทน แทนที่จะ highlight ใน function test ที่เราเขียน

ยกตัวอย่างเวลาเขียนเขียน test UI แล้วสิ่งหนึ่งที่เรามักต้องทำซ้ำๆ กันก็คือ การทดสอบว่า element นั้นๆ มัน appear ออกมาหรือยัง ซึ่งเราก็สร้างออกมาเป็น function แยกต่างหาก ดังโค้ดต่อไปนี้

June 18, 2016

เริ่มเขียน Unit Testing ด้วย Swift

เท่าที่เคยสนทนากับหลายคนเกี่ยวกับการเขียน Unit Testing มา พบว่ามีคนอยู่ 2 กลุ่ม คือ

กลุ่มที่ 1 ไม่พูดถึง :D
กลุ่มที่ 2 คือ คนที่เห็นคุณค่าของการเขียน test อยากเขียน test แต่ยังไม่เขียน เพราะไม่รู้จะเริ่มต้นยังไงดี บางคนเคยลองเริ่มต้นเองดูแล้วแต่ไม่สามารถจับทิศทางหรือเทคนิคได้ ก็เลยเลิกล้มไปในที่สุด

สำหรับคนกลุ่มที่ 2 ควรลองอ่านบทความนี้ดูครับ บทความนี้จะเสนอแนวคิดขั้นต้นในการเขียนโค้ดเพื่อให้เราสามารถ Test ได้

สำหรับการเขียน Test ให้กับ function ที่ไม่ได้มี dependency เลย นั้นทุกคนมักเขียนได้ เพราะมันค่อนข้างตรงไปตรงมา เช่น function ที่มีการรับค่าเข้าไปคำนวนได้ด้วยตัวเอง และ return กลับมาก็จบ แต่ที่เคยรู้มาคือปัญหาจะเกิดขึ้นตอนที่ function ที่ต้องการทดสอบนั้นมี dependency นี่แหละที่หลายคนมักจะงงกันว่าเราจะทดสอบมันยังไง

นี่คือ 4 เรื่องหลัก ที่เราต้องคิดถึงมันตลอดเวลาที่เราเขียนเทส และออกแบบ production code ของเรา