Inject đối tượng Mock sử dụng annotation @InjectMocks của Mockito

Trong bài viết trước, chúng ta truyền đối tượng Mock vào class mà chúng ta đang viết Unit Test bằng cách sử dụng phương thức Setter của class này. Thế nhưng, trong trường hợp nếu các bạn đang sử dụng Spring framework trong ứng dụng của mình, các đối tượng phụ thuộc được inject vào đối tượng chúng ta đang viết Unit Test sử dụng annotation @Autowire, do vậy, chúng ta sẽ không có các phương thức Setter để truyền đối tượng Mock. Trong trường hợp này, các bạn có thể sử dụng annotation @InjectMocks của Mockito để làm được điều này. Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé!

Đầu tiên, mình sẽ tạo một Maven project:

Inject đối tượng Mock sử dụng annotation @InjectMocks của Mockito

với Spring framework, Mockito và JUnit dependencies như sau:

Với JUnit 5, để chạy được Unit Test với Maven, chúng ta cần khai báo plugin maven-surefire-plugin của Maven với latest version như sau:

Và compile source với target sử dụng Java 8 trở đi:

Trong ví dụ của bài viết này, mình sẽ tạo một ứng dụng nhỏ với một class Calculation định nghĩa một phương thức để tính hiệu của 2 số được khai báo với annotation @Component của Spring như sau:

Và một class Application định nghĩa một method sử dụng phương thức của class Calculation để tính hiệu của 2 số, nếu kết quả lớn hơn 0 thì sẽ trả về true, ngược lại sẽ là false. Class này sẽ inject bean của đối tượng Calculation sử dụng annotation @Autowire của Spring và được khai báo với annotation @Service như sau:

với tập tin cấu hình của Spring nằm trong thư mục src/main/resources với nội dung như sau:

Kết quả:

Inject đối tượng Mock sử dụng annotation @InjectMocks của Mockito

Bây giờ, chúng ta sẽ viết Unit Test cho class Application các bạn nhé!

Bởi vì hiện tại class Application không có phương thức Setter cho đối tượng Calculation nên mình sẽ sử dụng annotation @InjectMocks của Mockito để inject đối tượng này vào class Application như sau:

Như các bạn thấy ở trên, mình đã khai báo sử dụng class Application với annotation @InjectMocks. Việc khai báo này sẽ giúp cho chúng ta có thể inject hết tất cả các đối tượng được khai báo với annotation @Mock trong class ApplicationTest vào đối tượng Application, ở đây là class Calculation.

Nếu bây giờ các bạn chạy Maven test thì sẽ thấy kết quả như sau:

Inject đối tượng Mock sử dụng annotation @InjectMocks của Mockito

2 thoughts on “Inject đối tượng Mock sử dụng annotation @InjectMocks của Mockito

  1. Avatar

    Bạn ơi, upload source code lên giúp mình được ko?
    MÌnh ko cấu hình project được.
    Đoạn bỏ file vào src/main/resources. Project mình cấu hình ko ra cái package như bạn.

Add Comment