2013-04-24 12 views
6

Non riesco a eseguire una classe di test molto semplice utilizzando il runner Powermock test. Provoca un eccezione ExceptionInInitializerError. Sembra essere un problema con le dipendenze sul classpath, tuttavia, ho provato alcune varianti delle versioni di dipendenza, ma tutte causano lo stesso errore. Come posso far passare questo semplice test quando utilizzo il runner Powermock?PowerMockRunner causa ExceptionInInitializerError quando si esegue il test banale

Il codice di prova:

package net.solasistim.hello; 

import org.junit.Test; 
import org.junit.Assert; 
import org.junit.runner.RunWith; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
public class HelloTest { 
    @Test 
    public void testMain() { 
     Assert.assertTrue(true); 
    } 
} 

Progetto POM:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>net.solasistim.hello</groupId> 
    <artifactId>hello</artifactId> 
    <version>1</version> 
    <packaging>jar</packaging> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <powermock.version>1.5</powermock.version> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-easymock</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>3.0</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.ow2.asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>4.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Esecuzione mvn clean compile test provoca il seguente output:

------------------------------------------------------------------------------- 
Test set: net.solasistim.hello.HelloTest 
------------------------------------------------------------------------------- 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.097 sec <<< FAILURE! 
initializationError(net.solasistim.hello.HelloTest) Time elapsed: 0.007 sec <<< ERROR! 
java.lang.ExceptionInInitializerError 
     at org.powermock.api.extension.proxyframework.ProxyFrameworkImpl.isProxy(ProxyFrameworkImpl.java:29) 
     at org.powermock.reflect.internal.WhiteboxImpl.getUnmockedType(WhiteboxImpl.java:1783) 
     at org.powermock.reflect.internal.WhiteboxImpl.getType(WhiteboxImpl.java:2237) 
     at org.powermock.reflect.internal.WhiteboxImpl.checkArgumentTypesMatchParameterTypes(WhiteboxImpl.java:2191) 
     at org.powermock.reflect.internal.WhiteboxImpl.findMethodOrThrowException(WhiteboxImpl.java:938) 
     at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:882) 
     at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:859) 
     at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466) 
     at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.registerProxyframework(AbstractTestSuiteChunkerImpl.java:154) 
     at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.getPowerMockTestListenersLoadedByASpecificClassLoader(AbstractTestSuiteChunkerImpl.java:107) 
     at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:143) 
     at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39) 
     at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217) 
     at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59) 
     at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32) 
     at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:33) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:532) 
     at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
     at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
     at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
     at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
     at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
     at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 
     at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:51) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
     at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
     at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
     at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
     at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: java.lang.IllegalArgumentException 
     at org.objectweb.asm.ClassVisitor.<init>(Unknown Source) 
     at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:49) 
     at net.sf.cglib.core.DefaultGeneratorStrategy.getClassVisitor(DefaultGeneratorStrategy.java:30) 
     at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24) 
     at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
     at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
     at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
     ... 38 more 

risposta

3

PowerMock e il più recente cglib sembrano non andare d'accordo con l'un l'altro. Non posso dire esattamente il motivo, ma se si downgrade da 3,0 a 2.2.2, dovrebbe funzionare:

<dependency> 
    <groupId>cglib</groupId> 
    <artifactId>cglib</artifactId> 
    <version>2.2.2</version> 
    <scope>test</scope> 
</dependency> 
Problemi correlati