当将PowerMock与Mockito 2.X一起使用时,由于兼容性问题和Mockito API的变化,可能会出现一些常见的例外和问题。以下是一些最常见的例外以及如何解决这些例外:
1。noclassdeffounderror:org.mockito.cglib.proxy.methodinterceptor **
使用错误的PowerMock API扩展时,会发生此例外。 “ PowerMock-Api-Mockito”扩展不适用于Mockito 2.X,导致此错误。要修复它,您应该使用`powermock-api-mockito2`扩展名[1] [2]。2。摩擦和PowerMock的不兼容版本**
使用Mockito和PowerMock的不兼容版本可能会导致各种例外。例如,PowerMock 1.6.5对Mockito 2.x有实验支持,但这不是可靠的。确保使用兼容版本,例如使用Mockito 2.1.0 [1] [2]的PowerMock 1.7.0 RC2。3。
使用PowerMock 1.6.5或1.7.0 rc2与Mockito 2.7.1时,您可能会遇到“ Illegalaccesserror”。通过使用PowerMock 1.7.0 RC4 [1] [4]来解决此问题。4。带有PowerMock的Mockito 2.X中的RunTimeExceptionProxy **
在带有PowerMock的Mockito 2.X中,原始异常被包裹为“ RuntimeExceptionProxy”。这需要从@test(Expection = someException.class)``@testest(Exceeld = exception.class)'修改测试注释。5。带有PowerMock的WhiteBox 的FieldNotFoundException
Mockito 2.x删除了白框,因此使用PowerMock的WhiteBox可以导致“ FieldNotFoundException”。如果发生这种情况,请考虑编写自己的实现或重构代码以更好地测试性[1] [2]。6。未完成的StubbingException **
即使固执似乎正确,也会发生这种例外。确保在固执方法中没有内联模拟创作,并且使用``theReturn()`or'or`or`thenthrow()`[3]''theReturn()``7。与较新的Mockito版本的兼容性问题**
PowerMock可能与较新的Mockito版本不兼容,例如Mockito 4.0.0。在这种情况下,使用与PowerMock兼容的旧版本可能是必要的[10]。总体而言,用PowerMock迁移到Mockito 1.X的Mockito 2.X涉及解决这些兼容性问题和潜在的重构测试,以避免完全使用PowerMock [1] [4]。
引用:[1] https://proandroiddev.com/mockito-2-x-x-over-powermock migration-tips-tips-and-tricks-top-top-top-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-exception
[4] https://proandroiddev.com/mockito-2-x-xmigration-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-to-nocected-exception-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