มีคำถามเกี่ยวกับ ความแตกต่างระหว่าง @Mock กับ @InjectMocks ใน Mockito
ว่าใช้งานเหมือนหรือต่างกันอย่างไร ?

ก่อนอื่นต้องทำความรู้จักกับ @InjectMocks ก่อน

เป็น annotation ที่เพิ่มเข้ามาใน Mockito ตั้งแต่ version 1.8.3
ตอนนี้ Mockito version 4.3.1
ใช้สำหรับการสร้าง object ของ class ที่จะทดสอบ
พร้อมทั้ง inject หรือส่ง dependency ต่าง ๆ เข้าไปยัง class ที่จะทดสอบแบบอัตโนมัติ
ทั้ง constructor, field หรือ setter injection ก็ตาม

ส่วน @Mock เป็นเพียงการสร้าง instance ของ dependency เท่านั้น

อ่านแล้วงง มาดูตัวอย่าง code ดีกว่า

จาก code ตัวอย่าง จะใช้งานง่ายขึ้น
และมี magic เข้ามา คือ การ inject dependency เข้าไปให้แบบอัตโนมัติ

และเป็น annotation ที่มาพร้อมกับความซับซ้อนที่เราต้องเข้าใจ
เนื่องจากทำให้การใช้งานสั้นลง
แต่เพิ่มความงงเข้าไป