จาก VDO เรื่อง Test Driven Development(TDD) for iOS (and anything) ของคุณ Jon Reid
ได้พูดถึงเรื่องการจัดการ dependency
เพื่อทำให้ code ของเรานั้นมันไม่ผูกติดกันมากไป (Loose coupling)
และสามารถทดสอบได้ง่าย
จึงทำการสรุปไว้นิดหน่อย
สิ่งที่ developer ทุกคนควรทำความเข้าใจกับ TDD ก่อนเสมอ
ซึ่งมี resources ที่ต้องอ่าน คือ มาถึงเนื้อหาที่น่าสนใจกันบ้างเริ่มจากอธิบายเกี่ยวกับ Unit test มี 3 ชนิด คือ
- Return value test
- State test
- Interaction test
1. Return value test คืออะไร
อธิบายด้วย AAA (Arrange-Act-Assert) ได้ดังนี้- Arrange = ทำการกำหนดค่าเริ่มต้นต่าง ๆ ของ object
- Act = ทำการเรียก method/function ที่ทำการ return ผลลัพธ์กลับมา
- Assert = ทำการตรวจสอบผลการทำงาน กับ สิ่งที่คาดหวังว่าตรงกันหรือไม่
2. State test
อธิบายด้วย AAA (Arrange-Act-Assert) ได้ดังนี้- Arrange = ทำการกำหนดค่าเริ่มต้นต่าง ๆ ของ object
- Act = ทำการเรียก method/function โดยไม่สนใจว่าจะส่งค่าอะไรกลับมา
- Assert = ทำการดึงข้อมูล หรือ สถานะจาก object ที่ทำการทดสอบ ว่าทำงานตามที่ต้องการหรือไม่
3. Interaction test
เป็นการทดสอบสำหรับการทำงานร่วมกันของ object ต่าง ๆ ซึ่งเป็นชนิดการทดสอบที่ถูกใช้งานอย่างมาก และแน่นอนว่าเป็นเรื่องหลักของ VDO นี้ แสดงการทำงานดังรูป จากรูปอาจดูไม่ค่อยเข้าใจเท่าไรนัก !! ดังนั้นจึงทำการอธิบายด้วยการทำงานของร้านอาหาร ซึ่งประกอบไปด้วย 3 ส่วน คือ- ลูกค้า
- พนักงาน
- พ่อครัว
วิธีการของ Dependency Injection มีหลายวิธี ดังนี้
- Extract and Override method
- Method injection
- Property injection
- Constructor injection
- Ambient context