当前位置: 首页 > 知识库问答 >
问题:

使用mockito&powermock时的ClassCastException

欧旻
2023-03-14

当在eclipse中运行一个junit4测试案例时,它作为一个独立的应用程序运行得很好,我得到以下堆栈跟踪。


java.lang.ExceptionInInitializerError:
        at sun.reflect.GeneratedSerializationConstructorAccessor6.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
        at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:59)
        at org.mockito.internal.creation.jmock.ClassImposterizer.createProxy(ClassImposterizer.java:128)
        at org.mockito.internal.creation.jmock.ClassImposterizer`enter code here`.imposterise(ClassImposterizer.java:63)
        at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
        at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
        at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143)
        at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:84)
        at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:51)
        at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$LastRuleTestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:148)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:91)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
        at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
        at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
        at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
        at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118)
        at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:104)
        at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
        at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53)
        at org.junit.runners.Suite.runChild(Suite.java:127)
        at org.junit.runners.Suite.runChild(Suite.java:26)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
        at testcases.net.idt.debit.ratesvr.monitor.MonitorTest.main(MonitorTest.java:392)
Caused by: java.lang.ClassCastException: org.powermock.core.classloader.MockClassLoader cannot be cast to java.net.URLClassLoader

我的测试用例使用了以下注释


@RunWith(PowerMockRunner.class)
@PrepareForTest({Monitor.class, Client.class, java.net.URLClassLoader.class})
@PowerMockIgnore( {"javax.management.*", "java.lang.*", "java.security.*", "java.net.*" })

我如何告诉它忽略URLClasLoader?

共有1个答案

霍永年
2023-03-14

要模拟的类Monitor.class扩展了另一个类MonitorBase.class在该类中有一个静态初始值设定项

static {
....
}

所以当Monitor.Class加载时,MonitorBase.Class在被“嘲弄”之前被实例化,我删除了“Extends MonitorBase”并为MonitorBase.Class创建了一个Monitor接口

这解决了问题

 类似资料:
  • 问题内容: 谁能总结一下,究竟什么功能使您在Mockito的基础上添加了PowerMock? 到目前为止,我已经找到了这些: 模拟静态,最终和私有方法 删除静态初始化器 允许在没有依赖项注入的情况下进行嘲笑-我不清楚这一点。你能详细说明吗? 它还会添加其他内容吗?您可以分几行进行总结吗? 使用PowerMock时需要牺牲一些东西吗? 问题答案: 我不知道还有其他好处,但是我想解决您的两个子问题(这

  • 我正在尝试将powermock库添加到工作项目中,但出现了错误。 我如何添加它: 1) 2) 建造。梯度依赖 3)在一些测试中添加。在此步骤后发生此错误。 内置的。所有的图书馆都包括在内。初始化HeadMessage应用程序以使用Gdx的位置出错。*静态变量。 项目中的所有测试都扩展了这个类: 错误: 组织。testng。TestNgeException:实例化类ru时出错。酷一。冒险与模拟。输入

  • 我试图用Powermock和Mockito编写一个JUnit测试用例。我正在从测试用例下面调用一个方法。此方法从method1调用,而该方法调用Method2。我已经添加了@runwith和@preparefortest注释。 //这是我的测试类: 错误跟踪:

  • 问题内容: 我有以下要模拟的Logger,但要验证是否正在调用日志条目,而不是内容。 我想模拟用于LoggerFactory.getLogger()的任何类,但是我找不到如何做到这一点。到目前为止,这是我最终得到的结果: 我想知道: 我可以模拟静态模型以用于任何课程吗? 我只能似乎运行的,因此我似乎无法改变每个方法的特点。有没有解决的办法? 编辑结果: 我以为我已经尝试过了,但没有成功: 但是,谢

  • 问题内容: 我已经在JUnit中将PowerMock和PowerRule与Mockito集成在一起。 这是我的依赖项: 我的测试课是: 正在调用我需要模拟的静态方法。当我运行测试用例时,我得到。 全栈跟踪: java.lang.RuntimeException:javassist.NotFoundException:org.powermock.core.classloader.MockClassL