Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Máy giả mạo của PowerMock khác với người sản xuất mockito của Mockito


Máy giả mạo của PowerMock khác với người sản xuất mockito của Mockito


Powermock và Mockito đều được sử dụng để chế giễu trong Java, nhưng chúng phục vụ các mục đích khác nhau và có các tính năng riêng biệt, đặc biệt là cách họ xử lý việc chế giễu thông qua các triển khai `Mockmaker` tương ứng của họ.

Mockmaker của PowerMock

Powermock mở rộng các thư viện giả khác như Easymock và Mockito bằng cách cung cấp các khả năng mạnh mẽ hơn. Nó sử dụng trình điều khiển lớp tải lớp và mã byte tùy chỉnh để cho phép chế tạo các phương thức tĩnh, hàm tạo, lớp và phương thức cuối cùng, phương thức riêng tư và loại bỏ các bộ khởi tạo tĩnh [4] [9]. `Mockmaker` của PowerMock được thực hiện bởi lớp` powermockmaker`, mà ủy thác các cuộc gọi cho một `mockmaker` khác nếu cần. Điều này cho phép PowerMock hoạt động cùng với các khung chế nhạo khác mà không có xung đột, miễn là nó được cấu hình chính xác [7].

Cách tiếp cận của PowerMock là xâm lấn hơn, đòi hỏi sự thao túng mã byte để đạt được khả năng chế giễu tiên tiến của nó. Điều này có thể có lợi cho các kịch bản phức tạp trong đó một mình Mockito là không đủ, chẳng hạn như chế tạo các phương pháp tĩnh hoặc phương pháp riêng tư [9].

Mockito's Mock-Maker-Inline

Mockito's `Mock-Maker-Inline` là một tính năng được giới thiệu để cho phép chế giễu các lớp và phương pháp cuối cùng. Nó không yêu cầu thao tác mã byte như PowerMock mà thay vào đó sử dụng API thiết bị của Java để sửa đổi các lớp khi chạy. Cách tiếp cận này ít xâm lấn hơn và không cần trình tải lớp tùy chỉnh [2] [8].

Để bật `Mock-trình tạo inline`, bạn thường thêm một tệp có tên` org.mockito.plugins.mockmaker` với nội dung `mock-maker inline` trong thư mục` src/test/resource/mockito-extensions`. Ngoài ra, bạn có thể sử dụng tạo tác `mockito inline`, giúp đơn giản hóa quy trình bằng cách không yêu cầu cấu hình thủ công của tệp mở rộng` Mockmaker` [2] [10].

Mockito 5.0.0 và các phiên bản sau này sử dụng `mock-maker inline` làm nhà sản xuất giả định mặc định, giúp việc chế tạo các lớp và phương thức cuối cùng dễ dàng hơn mà không cần cấu hình bổ sung [3] [10].

Sự khác biệt chính

-Tính xâm lấn: PowerMock xâm lấn hơn do sử dụng thao tác bytecode và trình tải lớp tùy chỉnh, trong khi `mocker-mocker-inline` của Mockito sử dụng thiết bị Java, ít xâm lấn hơn.
- Khả năng: PowerMock có thể chế giễu các phương thức tĩnh, hàm tạo và phương thức riêng tư mà Mockito không thể làm mà không có các công cụ bổ sung như `mockito inline` cho các lớp và phương thức cuối cùng.
-Cấu hình: PowerMock yêu cầu cấu hình cụ thể để ủy thác cho các triển khai `Mockmaker` khác, trong khi có thể bật` mocker-mock-inline 'của Mockito bằng tệp cấu hình đơn giản hoặc bằng cách sử dụng oltifact `mockito inline`.
-Hành vi mặc định: Trong mockito 5 trở lên, `mock-saker inline` là mặc định, trong khi PowerMock luôn yêu cầu thiết lập rõ ràng để sử dụng các tính năng nâng cao của nó.

Tóm lại, trong khi cả Powermock và Mockito `Mocker-Maker-Inline 'tăng cường khả năng chế giễu, chúng khác nhau đáng kể trong cách tiếp cận, sự xâm lấn và các loại chế giễu mà họ hỗ trợ. PowerMock mạnh mẽ hơn nhưng cũng phức tạp hơn, trong khi `mocker-nhà sản xuất inline 'của Mockito cung cấp một cách đơn giản hơn để chế giễu các lớp và phương pháp cuối cùng.

Trích dẫn:
[1] https://github.com/powermock/powermock/wiki/mockito
.
[3] https://stackoverflow.com/questions/65986197/difference-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/InlineMockMaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.MockMaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.PowerMockMaker
.
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-mock-final-methods