Refactor Your iOS Test with Useful Technique

เมื่อเราเขียน Test มากขึ้น Test ของเราก็มีขนาดใหญ่มากขึ้น และเมื่อเรา Refactor โค้ดได้ เราก็ควร Refactor Test ได้ด้วยเช่นกัน วันนี้มีตัวอย่างเล็กๆ มาให้ดูกัน


เราคงคุ้นชินกับคำสั่ง Assertion ต่างๆ ที่เราใช้กันในเทส และมันจะดีมาก ถ้าเราสามารถเขียนโค้ดที่นำกลับมาใช้ใหม่ได้ กับพวกคำสั่ง Assertion ได้ ตัวอย่างที่ผมจะนำมาเล่าให้อ่านกันมาจากของใหม่บน Xcode 7 นั่นคือ UI Testing นั่นเอง


Wait for the Code ....

จากตัวอย่างคือการตรวจสอบว่า Element หรือ UI ที่เราต้องการทดสอบปรากฎอยู่บนหน้าจอภายใน 5 วินาทีหรือไม่ ซึ่งเป็นกรณีทั่วไปมากที่เราใช้ในการทำ Automated UI Testing ดังนั้น เราน่าจะ Refactor มันเป็นแบบนี้ได้


Wait for the Code ....

คราวนี้เราก็สามารถเรียกใช้ผ่านฟังก์ชั่น waitForElementToAppear(app.cells["someElementIdentifer"]) ได้เลย แล้วจะเกิดอะไรขึ้นถ้าเทสเกิด Fail ขึ้นมา ?


เราจะเห็นว่ามันดูไม่ค่อยดีเท่าไหร่ ที่มันดันไปพ่นข้อความของความผิดพลาดที่เกิดขึ้นตรง Helper Function เราซะงั้น ทำให้เราไม่รู้ว่า ตกลงมันเกิดความผิดพลาดจากตรงไหนกันแน่ จริงๆ แล้วที่ผมต้องการบอกคือจากนี้ต่างหาก

ลองเปลี่ยนโค้ดที่เรา Refactor ออกมาเป็นแบบนี้ครับ


Wait for the Code ....

จากโค้ดด้านบน เราจะใช้ประโยชน์ของ recordFailureWithDescription() เพื่อจะโยน failing message ด้วยตัวเอง ซึ่งฟังก์ชั่นดังกล่าวต้องการค่าต่างๆ ดังนี้
  • message: จะให้มันพ่นคำว่าอะไรตอน Test Fail
  • file: ชื่อไฟล์
  • line: เลขบรรทัดที่ต้องการให้พ่นออกไป
  • expected: ใส่ true สำหรับ test failures และ false สำหรับ uncaught exceptions
ซึ่งจากการทำแบบนี้ จะทำให้ข้อความที่ถูกพ่นออกมาไม่ขึ้นกับเวลาที่คำสั่ง Assertion เกิดข้อผิดพลาด แต่จะขึ้นอยู่กับการให้ค่าของตัวแปร error ใน closure ของฟังก์ชั้นที่เราเรียกใช้แทน

ส่วนตัวแปร file และ line นี่ก็ไม่ต้องห่วง เพราะเราสามารถเข้าถึงได้ผ่าน Magic Constant ที่อยู่ใน Cocoa Touch Frameworks ได้เลย ซึ่งเราเขียนให้เป็น default parameters แทน แต่ไม่ต้องส่งอะไรมา 


คราวนี้ก็จะได้ผลลัพธ์อย่างที่เราต้องการละ... ลองนำไปทำกันดูนะครับ

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22