Исключение в потоке «main» java .lang.IllegalStateException: не удалось преобразовать класс с именем - PullRequest
0 голосов
/ 05 августа 2020

Я использую JAVA 1.8 с версией Javaassist как 3.24.0 и power mock 1.7.4. Я сталкиваюсь с этой проблемой, когда включаю класс в @ PrepareForTest. Здесь класс MainClass зависит от экземпляра serverCommunicator.class.

 public class MainClass
    {
    public void sendInitRequest()
       {
          ServerCommunicator communicator = ServerCommunicator.getInstance();
          communicator.init();
       }
    }

public class ServerCommunicator
{
private static communicator ;
public static ServerCommunicator getInstance()
{
   return communicator;
}
public void init()
{
System.out.println("Communication has initialized ");
}
}

Тестовый пример для вышеуказанного метода, который я написал так:

@PowerMockIgnore("javax.management.*")
                @RunWith(PowerMockRunner.class)
                @PrepareForTest({ ServerCommunicator.class }
 @Test
   public void testSendInitRequest() throws NullPointerException
   {
      try
      {
         MainClass mainClass = new MainClass();
            final ServerCommunicator communicator = PowerMockito.mock(new ServerCommunicator());
         PowerMockito.mockStatic(ServerCommunicator.class);
         when(ServerCommunicator.getInstance()).thenReturn(communicator);
         PowerMockito.doNothing().when(communicator).init();
         mainClass.sendInitRequest();
         assertTrue(true);
      }
      catch (Throwable t)
      {

         assertTrue(1 == 0);
      }
   }

Итак, когда я добавляю serverCommunicator.class в @PrepareForTest, он показывает следующую ошибку: исключение в потоке «main» java .lang.IllegalStateException: не удалось преобразовать класс с именем ServerCommunicator. Причина: ноль

FAILED CONFIGURATION: @BeforeClass beforePowerMockTestClass
java.lang.NullPointerException
    at javassist.bytecode.stackmap.Tracer.checkParamTypes(Tracer.java:899)
    at javassist.bytecode.stackmap.Tracer.doInvokeMethod(Tracer.java:798)
    at javassist.bytecode.stackmap.Tracer.doOpcode148_201(Tracer.java:592)
    at javassist.bytecode.stackmap.Tracer.doOpcode(Tracer.java:78)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:195)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:207)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:207)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:207)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:172)
    at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:116)
    at javassist.bytecode.MethodInfo.rebuildStackMap(MethodInfo.java:458)
    at javassist.bytecode.MethodInfo.rebuildStackMapIf6(MethodInfo.java:440)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:118)
    at javassist.CtClassType.instrument(CtClassType.java:1541)
    at org.powermock.core.transformers.javassist.InstrumentMockTransformer.transform(InstrumentMockTransformer.java:41)
    at org.powermock.core.transformers.javassist.AbstractJavaAssistMockTransformer.transform(AbstractJavaAssistMockTransformer.java:40)
    at org.powermock.core.transformers.support.DefaultMockTransformerChain.transform(DefaultMockTransformerChain.java:43)
    at org.powermock.core.classloader.MockClassLoader.transformClass(MockClassLoader.java:184)
    at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:102)
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:174)
    at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:102)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(Unknown Source)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseSig(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(Unknown Source)
    at java.lang.Class.createAnnotationData(Unknown Source)
    at java.lang.Class.annotationData(Unknown Source)
    at java.lang.Class.getAnnotation(Unknown Source)
    at org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotationInSuperClasses(JDK15AnnotationFinder.java:88)
    at org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(JDK15AnnotationFinder.java:177)
    at org.testng.internal.annotations.AnnotationHelper.findTest(AnnotationHelper.java:32)
    at org.testng.internal.MethodHelper.isEnabled(MethodHelper.java:158)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:186)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:170)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

FAILED CONFIGURATION: @AfterClass afterPowerMockTestClass
java.lang.NullPointerException
    at javassist.expr.MethodCall.getClassName(MethodCall.java:110)
    at javassist.expr.MethodCall.getCtClass(MethodCall.java:90)
    at javassist.expr.MethodCall.getMethod(MethodCall.java:129)
    at org.powermock.core.transformers.javassist.support.PowerMockExpressionEditor.edit(PowerMockExpressionEditor.java:79)
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:197)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:96)
    at javassist.CtClassType.instrument(CtClassType.java:1541)
    at org.powermock.core.transformers.javassist.InstrumentMockTransformer.transform(InstrumentMockTransformer.java:41)
    at org.powermock.core.transformers.javassist.AbstractJavaAssistMockTransformer.transform(AbstractJavaAssistMockTransformer.java:40)
    at org.powermock.core.transformers.support.DefaultMockTransformerChain.transform(DefaultMockTransformerChain.java:43)
    at org.powermock.core.classloader.MockClassLoader.transformClass(MockClassLoader.java:184)
    at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:102)
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:174)
    at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:102)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(Unknown Source)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseSig(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(Unknown Source)
    at java.lang.Class.createAnnotationData(Unknown Source)
    at java.lang.Class.annotationData(Unknown Source)
    at java.lang.Class.getAnnotation(Unknown Source)
    at org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotationInSuperClasses(JDK15AnnotationFinder.java:88)
    at org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(JDK15AnnotationFinder.java:177)
    at org.testng.internal.annotations.AnnotationHelper.findTest(AnnotationHelper.java:32)
    at org.testng.internal.MethodHelper.isEnabled(MethodHelper.java:158)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:186)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:220)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
java.lang.IllegalStateException: Failed to transform class with name ServerCommunicator. Reason: null
    at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:119)
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:174)
    at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:102)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(Unknown Source)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseSig(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseClassArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseArray(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(Unknown Source)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(Unknown Source)
    at java.lang.Class.createAnnotationData(Unknown Source)
    at java.lang.Class.annotationData(Unknown Source)
    at java.lang.Class.getAnnotation(Unknown Source)
    at org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(JDK15AnnotationFinder.java:128)
    at org.testng.internal.ExpectedExceptionsHolder.findExpectedClasses(ExpectedExceptionsHolder.java:28)
    at org.testng.internal.ExpectedExceptionsHolder.<init>(ExpectedExceptionsHolder.java:22)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1055)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.NullPointerException
    at javassist.expr.MethodCall.getClassName(MethodCall.java:110)
    at javassist.expr.MethodCall.getCtClass(MethodCall.java:90)
    at javassist.expr.MethodCall.getMethod(MethodCall.java:129)
    at org.powermock.core.transformers.javassist.support.PowerMockExpressionEditor.edit(PowerMockExpressionEditor.java:79)
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:197)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:96)
    at javassist.CtClassType.instrument(CtClassType.java:1541)
    at org.powermock.core.transformers.javassist.InstrumentMockTransformer.transform(InstrumentMockTransformer.java:41)
    at org.powermock.core.transformers.javassist.AbstractJavaAssistMockTransformer.transform(AbstractJavaAssistMockTransformer.java:40)
    at org.powermock.core.transformers.support.DefaultMockTransformerChain.transform(DefaultMockTransformerChain.java:43)
    at org.powermock.core.classloader.MockClassLoader.transformClass(MockClassLoader.java:184)
    at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:102)
...