&引用;无法转换名为[类名]的类。原因:javax.servlet.ServletContext“;在ANT脚本中运行测试时
在运行ANT测试任务之后,当我尝试运行特定的测试套件时,日志中会出现初始化错误。完整堆栈跟踪如下所示:&引用;无法转换名为[类名]的类。原因:javax.servlet.ServletContext“;在ANT脚本中运行测试时,java,ant,junit,powermock,Java,Ant,Junit,Powermock,在运行ANT测试任务之后,当我尝试运行特定的测试套件时,日志中会出现初始化错误。完整堆栈跟踪如下所示: Failed to transform class with name [CLASS NAME]. Reason: javax.servlet.ServletContext java.lang.IllegalStateException: Failed to transform class with name [CLASS NAME]. Reason: javax.servlet.Servl
Failed to transform class with name [CLASS NAME]. Reason: javax.servlet.ServletContext
java.lang.IllegalStateException: Failed to transform class with name [CLASS NAME]. Reason: javax.servlet.ServletContext
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.lang.ClassLoader.defineClass(ClassLoader.java:635)
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:269)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3168)
at java.lang.Class.getAnnotation(Class.java:3127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.<init>(PowerMockJUnit44RunnerDelegateImpl.java:70)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl.<init>(PowerMockJUnit47RunnerDelegateImpl.java:42)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit49RunnerDelegateImpl.<init>(PowerMockJUnit49RunnerDelegateImpl.java:25)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:156)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40)
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:61)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
Caused by: javassist.NotFoundException: javax.servlet.ServletContext
at javassist.ClassPool.get(ClassPool.java:450)
at javassist.bytecode.Descriptor.toCtClass(Descriptor.java:592)
at javassist.bytecode.Descriptor.getReturnType(Descriptor.java:489)
at javassist.CtBehavior.getReturnType0(CtBehavior.java:306)
at javassist.CtMethod.getReturnType(CtMethod.java:217)
at org.powermock.core.transformers.impl.MainMockTransformer.modifyMethod(MainMockTransformer.java:163)
at org.powermock.core.transformers.impl.MainMockTransformer.allowMockingOfStaticAndFinalAndNativeMethods(MainMockTransformer.java:133)
at org.powermock.core.transformers.impl.MainMockTransformer.transform(MainMockTransformer.java:65)
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:251)
目标是当被测试的类尝试实例化problemClass时,它只会创建一个模拟对象而不是一个真实实例
classBeingTested扩展了堆栈交易中提到的类。i、 e.classBeingTested扩展了[类名]
我还监视classBeingTested的实现,这样另一个方法在被调用时不做任何事情,而不是被调用
我不确定是否存在某种干扰,在这种干扰下,既要为测试准备类,又要在其中插入模拟构造函数,以及对其进行监视都是不合适的
注意:我可以使用run/debug在IntelliJ中很好地运行测试。在这两种情况下,测试都完成并显示为通过。因此,只有当ANT构建发生时,它才会失败
@RunWith(PowerMockRunner.class)
@PrepareForTest({problemClass.class, classBeingTested.class})