簡體   English   中英

使用 PowerMock 后的 Mockito ClassCastException

[英]Mockito ClassCastException after using PowerMock

成功地將 PowerMock 集成到我的項目中后,我遇到了這個錯誤: ClassCastException occurred while creating the mockito mock 我找到了一個解決方案,但它不起作用。 在運行測試時,在模擬某些JRE 類的類中發生錯誤。 如果我刪除使用 verifyStatic() 的測試,則錯誤消失。 如果我單獨運行有錯誤的測試,則一切正常。 我試過:

1)在Core模塊的測試文件夾中,我添加了包org.mockito.configurationMockitoConfigutation 如果我運行調試器並將停止點設置為enableClassCache()方法,它會在我運行測試時停止,這意味着該類按預期工作。

2) 在有錯誤的類上添加@PowerMockIgnore({"*.*"})注釋。

有錯誤的示例類:

@PowerMockIgnore({"*.*"})
public class PersonTest extends AbsTest {
    @BeforeClass
    protected void setUp() throws Exception {
        mock(ArrayList.class);
    }
}

Core模塊上的build.gradle

...
testCompile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
testCompile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
testCompile 'org.testng:testng:6.13.1'
testCompile "org.mockito:mockito-core:2.8.9"
testCompile "org.powermock:powermock-api-mockito2:1.7.3"
testCompile "org.powermock:powermock-module-testng:1.7.3"
testCompileOnly "org.projectlombok:lombok:1.16.18"
...

錯誤:

org.mockito.exceptions.base.MockitoException: ClassCastException 在創建 mockito 模擬時發生:要模擬的類:'com.brashmonkey.spriter.Animation',由類加載器加載:'sun.misc.Launcher$AppClassLoader@18b4aac2'創建的類: 'com.brashmonkey.spriter.Animation$MockitoMock$1309622717',由類加載器加載:'net.bytebuddy.dynamic.loading.MultipleParentClassLoader@185f7840'
代理實例類:'com.brashmonkey.spriter.Animation$MockitoMock$1309622717',由類加載器加載:'net.bytebuddy.dynamic.loading.MultipleParentClassLoader@185f7840'
實例創建者:ObjenesisInstantiator

您可能會遇到類加載問題,請詢問 mockito 郵件列表。

在 ru.coolone.adventure_emulation.scripts.person.PersonTest.setUpClass(PersonTest.java:160) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) at org. testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:451) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222) at org .testng.internal.Invoker.invokeConfigurations(Invoker.java:142) at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:163) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105) at org.testng.TestRunner.privateRun(TestRunn er.java:648) 在 org.testng.TestRunner.run(TestRunner.java:505) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:455) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) ) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) 在 org.testng.SuiteRunner.run(SuiteRunner.java:364) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng .SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187) at org.testng.TestNG.runSuitesLocally(TestNG.java:1116) at org.testng.TestNG.runSuites( TestNG.java:1028) 在 org.testng.TestNG.run(TestNG.java:996) 在 org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) 在 org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) ) 引起:java.lang.ClassCastException: com.brashmonkey.spriter.Animation$MockitoMock$1309622717 不能轉換到 org.mockito.internal.creation.bytebuddy.MockAccess at org.mockito.internal.creation.bytebuddy.SubclassMaker.ByteBuddyMockAccess createMock(SubclassByteBuddyMockMaker.java:48) 在 org.powermock.api.mockito.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:50) 在 org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMethodInvocationControl(Defaultjava:Cre 116) 在 org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:69) 在 org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:46) 在.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:138) ... 26 更多

好的,所以我有相同的行為,這是行:

@PowerMockIgnore({"*.*"})

這將忽略導致問題的org.mockito.* 更具體地說明被忽略的內容,例如:

@PowerMockIgnore({"org.robolectric. ", "android. ", "com.sun.org.apache.xerces.internal.jaxp.*"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM