Khi làm việc với mockito, Hamcrest thường được sử dụng cho các trình chỉnh sửa biểu cảm của nó, giúp tăng cường khả năng đọc của các bài kiểm tra. Tuy nhiên, có những lựa chọn thay thế có thể hoạt động tốt với Mockito, mỗi người có điểm mạnh và điểm yếu của riêng họ.
assertj
AssertJ là một sự thay thế phổ biến cho Hamcrest để viết các xác nhận trong các bài kiểm tra đơn vị. Nó cung cấp một API trôi chảy mà nhiều nhà phát triển tìm thấy dễ sử dụng và biểu cảm hơn Hamcrest. Cú pháp của AssertJ thường được ưa thích cho khả năng đọc của nó và khả năng dễ dàng tạo các xác nhận tùy chỉnh. Mặc dù AssertJ không tích hợp trực tiếp với Mockito như Hamcrest, nhưng nó có thể được sử dụng cùng với Mockito để xác nhận, làm cho các bài kiểm tra dễ đọc và có thể duy trì hơn. Tuy nhiên, AssertJ chủ yếu tập trung vào các xác nhận thay vì khả năng phù hợp hơn của Hamcrest [1] [3].
Sự thật
Sự thật là một thư viện khẳng định khác được phát triển bởi Google. Nó cung cấp một API trôi chảy tương tự như AssertJ nhưng tập trung nhiều hơn vào việc cung cấp hỗ trợ hoàn thành tự động tốt hơn trong IDE, có thể có lợi cho việc khám phá các xác nhận có sẵn. Sự thật không được sử dụng phổ biến với Mockito như Hamcrest nhưng có thể được sử dụng để xác nhận trong các thử nghiệm. Giống như Assertj, sự thật tập trung hơn vào các xác nhận hơn là kết hợp đa năng mà Hamcrest cung cấp [3].
Matcher tích hợp của Mockito
Bản thân Mockito cung cấp các trình chỉnh sửa có thể được sử dụng để khai thác và xác minh các tương tác với các đối tượng giả. Các trình kết hợp này trả về loại mà chúng phù hợp (ví dụ: `bất kỳ (số nguyên. class)` trả về một `integer`), khác với trình kết hợp Hamcrest trả về một` matcher`. Để sử dụng các trình chỉnh sửa Hamcrest với Mockito, bạn có thể sử dụng `argthat` hoặc` mockitohamcrest.argthat` để chuyển đổi một trình kết hợp Hamcrest thành một dạng tương thích mockito [7].
Thực hiện tùy chỉnh
Đối với các kịch bản mà bạn không muốn sử dụng các thư viện bên ngoài, bạn có thể triển khai các trình mai mối hoặc xác nhận của riêng mình. Cách tiếp cận này cho phép kiểm soát hoàn toàn hành vi và cú pháp nhưng đòi hỏi nhiều nỗ lực và bảo trì hơn. Nó thường không được khuyến nghị trừ khi bạn có nhu cầu rất cụ thể mà các thư viện hiện có đáp ứng.
Phần kết luận
Mặc dù Hamcrest được sử dụng rộng rãi với Mockito do tính linh hoạt và biểu cảm của nó, các lựa chọn thay thế như AssertJ và Truth có thể tăng cường phần khẳng định trong các bài kiểm tra của bạn. Nếu bạn đang tìm kiếm thứ gì đó tích hợp tốt với Mockito cho mục đích phù hợp, Hamcrest vẫn là một lựa chọn mạnh mẽ, nhưng bạn có thể sử dụng trình mai mối của nó cùng với các thư viện khẳng định khác để có trải nghiệm thử nghiệm toàn diện hơn. Cuối cùng, sự lựa chọn phụ thuộc vào nhu cầu và sở thích cụ thể của bạn về khả năng đọc, dễ sử dụng và loại xác nhận hoặc phù hợp bạn cần thực hiện trong các bài kiểm tra của mình.
Trích dẫn:[1] https:
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
.
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito-and-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternatives-to-using-mock-libraries-such-as-mockito-in-unit-testing
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternative-to-using-the-deprecated-hamcrest-method-is