Giải thích các annotation @InjectMock, @Mock vs @MockBean
Ví dụ project sau
@Mock
@Mock là annotation của thư viện mockito, nó sẽ tạo ra một object giả của class được mock mà không cần quan tâm đến class thật.
Do đó, khi gọi bất kỳ method nào của class thì đều không thực hiện (nếu là void method) hoặc return defaul
Ví dụ
Run test trên sẽ cho kết quả in toàn bộ bean của Spring được khởi tạo
@InjectMock
@InjectMock sẽ tạo object thật từ class được mock
Khác với @Mock, khi gọi method của object được inject mock thì sẽ thực hiện method thực của nó
Kết quả test case
Khi tạo object với @InjectMock, object này sẽ inject tất cả các object đã được khởi tạo bởi @Mock và @Spy
Kết quả test case
@Spy
@Spy là khởi tạo một object thật của một class, mọi sự thay đổi sẽ thay thực hiện thật trên object này
Kết quả test case
Sử dụng @Spy khi muốn inject một object thật vào object test (bởi @InjectMocks)
Kết quả test case
@MockBean
@MockBean là annotation của Spring framework, một thay thế của @Mock