ความแตกต่างของ Unit test และ Integration test

Unit test คือการเขียน test ในส่วนเล็กของโปรแกรมเพื่อแสดงว่ามันทำงานได้อย่างที่ควรทำ มันควรทำง่ายได้ง่ายและไว เขียนสั้น กระชับ และเขียนเฉพาะส่วนที่โปรแกรมเมอร์เห็นว่าทำเป็นต้องเทส “ย้ำว่าโปรแกรมเมอร์” ซึ่ง test ชุดนี้เรียกว่าโปรแกรมเมอร์เป็นคนใช้เท่านั้น คนอื่นแทบจะไม่ได้ใช้และไม่เข้าใจมันสักเท่าไรด้วย เพียงแต่ถ้ามันทำงานได้อย่างที่มันควรทำ บรรดา tester และคนอื่นที่ปลายน้ำ เช่น ผู้ใช้งาน จะได้รับผลประโยชน์ตรงที่เจอบั๊กน้อยลง

จุดสำคัญของ Unit test คือ เขียนเทสเฉพาะส่วนที่โค้ดมี ส่วนไหนที่เป็นภายนอกของโค้ด ให้ทำการ “Mock มันทั้งหมด” โดย Unit test ไม่ควรมี dependency อะไรทั้งนั้น ซึ่งมันเป็นการทดสอบว่าระบบทำงานภายในได้เป็นอย่างดี จะแตกต่างจากเป้าหมายที่คนอื่นที่ไม่ใช่โปรแกรมเมอร์นั้นคาดหวังว่ามันควรทำงานกับระบบภายนอกได้

Integration test สิ่งนี้มีไว้เพื่อแสดงว่าระบบหลายส่วนที่มีนั้นสามารถทำงานร่วมกันได้ดี โดยการเขียน test ระดับนี้จะเขียนครอบคลุมทั้ง application เลย และยังต้องอาศัยความร่วมมือจากหลายส่วนด้วย เช่น ถ้าระบบมี DB เราก็ต้องมี DB ให้ทดสอบ ถ้าระบบมี API เราก็ต้องมี API สำหรับ test ด้วยเช่นกัน โดยเป้าหมายของการเขียน test ระดับนี้ คือแสดงให้บุคคลอื่นที่ไม่ใช่โปรแกรมเมอร์ได้เห็นว่าระบบทั้งหมดสามารถทำงานร่วมกันได้ แต่สำคัญว่าสภาพแวดล้อมของการรัน Integration test นั้น ควรต้องมีสภาพที่ใกล้เคียงกับ Production ให้มากที่สุด และไม่มีการ Mock อะไรเลย

Original content: stackoverflow.com

เขียนครั้งแรกเมื่อ 6 เมษายน 2016