Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Các ngoại lệ phổ biến khi sử dụng PowerMock với Mockito 2.x


Các ngoại lệ phổ biến khi sử dụng PowerMock với Mockito 2.x


Khi sử dụng PowerMock với Mockito 2.x, một số ngoại lệ và vấn đề phổ biến có thể phát sinh do các vấn đề tương thích và thay đổi trong API Mockito. Dưới đây là một số trường hợp ngoại lệ phổ biến nhất và cách giải quyết chúng:

###.
Ngoại lệ này xảy ra khi sử dụng tiện ích mở rộng API PowerMock sai. Phần mở rộng `powermock-api-mockito` không hoạt động với mockito 2.x, dẫn đến lỗi này. Để sửa nó, bạn nên sử dụng tiện ích mở rộng `powermock-api-mockito2` [1] [2].

2. Các phiên bản không tương thích của Mockito và PowerMock **

Sử dụng các phiên bản không tương thích của Mockito và PowerMock có thể dẫn đến các ngoại lệ khác nhau. Ví dụ, PowerMock 1.6.5 có hỗ trợ thử nghiệm cho Mockito 2.x, nhưng nó không đáng tin cậy. Đảm bảo bạn sử dụng các phiên bản tương thích, chẳng hạn như PowerMock 1.7.0 RC2 với Mockito 2.1.0 [1] [2].

###.
Khi sử dụng PowerMock 1.6.5 hoặc 1.7.0 RC2 với mockito 2.7.1, bạn có thể gặp phải một `bất hợp pháp horror '. Vấn đề này được giải quyết bằng cách sử dụng PowerMock 1.7.0 RC4 [1] [4].

###.
Trong mockito 2.x với powermock, các ngoại lệ ban đầu được bao bọc là `RunTimeExceptionProxy`. Điều này đòi hỏi phải sửa đổi các chú thích kiểm tra từ `@test (dự kiến ​​= someexception. class)` thành `@test (dự kiến ​​= ngoại lệ. class)` để bắt các ngoại lệ được gói [1].

###
Mockito 2.x đã loại bỏ Whitebox, do đó, sử dụng Whitebox PowerMockâ có thể dẫn đến `fieldnotfoundException`. Nếu điều này xảy ra, hãy xem xét việc viết triển khai của riêng bạn hoặc tái cấu trúc mã của bạn để có khả năng kiểm tra tốt hơn [1] [2].

###.
Ngoại lệ này có thể xảy ra ngay cả khi stubbing có vẻ chính xác. Đảm bảo rằng không có sáng tạo giả nội tuyến trong các phương thức stubbing và tất cả các stubbing được hoàn thành đúng với các phương thức như `thenreturn ()` hoặc `thenthrow ()` [3].

7. Các vấn đề tương thích với các phiên bản Mockito mới hơn **

PowerMock có thể không tương thích với các phiên bản Mockito mới hơn, chẳng hạn như Mockito 4.0.0. Trong những trường hợp như vậy, sử dụng phiên bản mockito cũ hơn tương thích với PowerMock có thể là cần thiết [10].

Nhìn chung, việc di chuyển sang Mockito 2.x từ Mockito 1.x với PowerMock liên quan đến việc giải quyết các vấn đề tương thích này và các thử nghiệm có khả năng tái cấu trúc để tránh sử dụng PowerMock hoàn toàn [1] [4].

Trích dẫn:
[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-exception
[4] https://proandroiddev.com/mockito-2-x-migration-session-recording-droidcon-uk-2018-ba70619f3811
[5] https://github.com/powermock/powermock/issues/706
[6] https://github.com/mockito/mockito/issues/1606
[7] https://stackoverflow.com/questions/69394651/cannot-run-powermock-due-to-unexpected-exception-and-org-mockito-exceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependencies-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109