Java 使用mockito模拟SessionContex会导致ClassNotFoundException
我从单元测试开始。我对一个类进行了更改,在该类中我没有注入SessionContext,以便在需要时进行查找Java 使用mockito模拟SessionContex会导致ClassNotFoundException,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我从单元测试开始。我对一个类进行了更改,在该类中我没有注入SessionContext,以便在需要时进行查找 @Resource private SessionContext ctx; 现在,在我的测试中,我想注入它,以便模拟查找方法: @Mock private SessionContext ctx; 但当我运行测试时,我得到: NoClassDefFoundError:javax/xml/rpc/handler/MessageContext 位于java.lang.Class.getDe
@Resource
private SessionContext ctx;
现在,在我的测试中,我想注入它,以便模拟查找方法:
@Mock
private SessionContext ctx;
但当我运行测试时,我得到:
NoClassDefFoundError:javax/xml/rpc/handler/MessageContext
位于java.lang.Class.getDeclaredMethods0(本机方法)
privateGetDeclaredMethods(Class.java:2615)位于
getDeclaredMethods(Class.java:1860)位于
org.mockito.cglib.core.reflectils.addAllMethods(reflectils.java:349)
位于org.mockito.cglib.proxy.Enhancer.getMethods(Enhancer.java:427)
org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:457)位于
org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
在
org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
位于org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
位于org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
在
org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:110)
在
org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
在
org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
在
org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
位于org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143)
在
org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:84)
在
org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:51)
在
org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runbeforesthenTestthenAfter(PowerMockJUnit44RunnerDelegateImpl.java:282)
在
org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
位于org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.invokeTestMethod(powermockjunit44runnerdelegateinpl.java:207)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.runMethods(powermockjunit44runnerdelegateinpl.java:146)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl$1.run(powermockjunit44runnerdelegateinpl.java:120)
在
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
在
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.run(powermockjunit44runnerdelegateinpl.java:118)
在
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:104)
在
org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
在
org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53)
在
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
在
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
原因:java.lang.ClassNotFoundException:
javax.xml.rpc.handler.MessageContext位于
java.net.URLClassLoader$1.run(URLClassLoader.java:366)位于
java.net.URLClassLoader$1.run(URLClassLoader.java:355)在
java.security.AccessController.doPrivileged(本机方法)位于
java.net.URLClassLoader.findClass(URLClassLoader.java:354)位于
loadClass(ClassLoader.java:425)位于
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)位于
loadClass(ClassLoader.java:358)。。。39多
我觉得很奇怪,因为我有所有需要的依赖项(这段代码在实际应用程序中工作)
如何使用mockito模拟和注入SessionContext?(我无法更改模拟框架)。我也遇到了同样的问题,并通过添加一个仅依赖于测试范围的依赖项来解决
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ejb_2.1_spec</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
org.apache.geronimo.specs
geronimo-ejb_2.1_规范
1.1
测试
我也遇到了同样的问题,并通过添加一个仅对测试范围的依赖项来解决
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ejb_2.1_spec</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
org.apache.geronimo.specs
geronimo-ejb_2.1_规范
1.1
测试
如果您使用的是jboss ee 7规范,那么您可能会遇到这个问题。它以前包含在JBossEE6规范中,但有些是如何从EE7中删除的(我还没有找到它)
org.jboss.spec
jboss-javaee-all-7.0
要解决此问题,请添加以下依赖项
<dependency>
<groupId>org.jboss.spec.javax.xml.rpc</groupId>
<artifactId>jboss-jaxrpc-api_1.1_spec</artifactId>
<version>1.0.1.Final</version>
<scope>provided</scope>
</dependency>
org.jboss.spec.javax.xml.rpc
jbo