Javassist.NotFoundException mit PowerMock und PowerRule in JUnit mit Mockito abrufen
Ich habe PowerMock und PowerRule in JUnit mit Mockito integriert.
Hier sind meine Abhängigkeiten:
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.0.GA</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.powermoc</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-objenesis</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
Meine Testklasse ist:
public class TestClass extends AbstractShiroTest{
@Rule
public PowerMockRule rule = new PowerMockRule();
@Autowired
SomeService someService;
@Before
public void setUp(){
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("userTimeZone", "Asia/Calcutta");
Subject subjectUnderTest = mock(Subject.class);
when(subjectUnderTest.getPrincipal()).thenReturn(LMPTestConstants.USER_NAME);
Session session = mock(Session.class);
when(session.getAttribute(LMPCoreConstants.USER_DETAILS_MAP)).thenReturn(newMap);
when(subjectUnderTest.getSession(false)).thenReturn(session);
setSubject(subjectUnderTest);
PowerMockito.mockStatic(CasSessionUtil.class);
when(CasSessionUtil.getCarrierId()).thenReturn(1L);
}
@Test
public void myTestMethod() {
someService.doSomething();
}
}
doSomething
ruft eine statische Methode auf, die ich verspotten muss. Wenn ich meinen Testfall durchführe, bekomme ichjavassist.NotFoundException: $Proxy88
.
Vollständiger Stack-Trace:
java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 bei org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) bei org.powermock.core.classloader.MockClassLoader.classloader at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass (DeferSupportingClassLoader.java:67) at java.lang.ClassLoader.loadClass (ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal (ClassLoader) java.lang.Class.forName0 (native Methode) bei java.lang.Class.forName (Class.java:247) bei org.powermock.api.support.ClassLoaderUtil.loadClass (ClassLoaderUtil.java:66) bei org.powermock. api.support.ClassLoaderUtil.loadClass (ClassLoaderUtil.java:26) bei org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:243) bei org.powermock.classloading.DeepCloner.performClone (DeepCloner.clone) .powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) bei org.powermock.classloading.DeepCloner.perform Klonen (DeepCloner.java:128) bei org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) bei org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) bei org.powermock.classloading .cloneFields (DeepCloner.java:248) bei org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) bei org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) bei org.powermock.powermock. DeepCloner.performClone (DeepCloner.java:128) bei org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) bei org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) bei org.classloading.powermock.java: .DeepCloner.cloneFields (DeepCloner.java:248) bei org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) bei org.powermock.classloading.DeepCloner.clone (DeepCloner.java:82) bei org.powermock. classloading.DeepCloner.clone (DeepCloner.java:69) at org.powermock.classloading.ClassloaderExecutor.execute (ClassloaderExecutor.java:89) at org. powermock.classloading.ClassloaderExecutor.execute (ClassloaderExecutor.java:78) at org.powermock.modules.junit4.rule.PowerMockStatement.evaluate (PowerMockRule.java:49) at org.springframework.test.context.junit4.spring. evaluieren (SpringRepeat.java:72) bei org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:231) bei org.junit.runners.BlockJUnit4ClassRunner.runCnit50junChild .runners.ParentRunner $ 3.run (ParentRunner.java:193) at org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:52) at org.junit.runers.ParentRunner.runChildren (ParentRunner.java: org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:42) at org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:184) at org.springframework.test.context.junit4.statements.RunBequestTest evaluieren (RunBeforeTestClassCallbacks.java:61) unter org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31) ) unter org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:71) unter org.junit.runners.ParentRunner.run (ParentRunner.java:236) unter org.springframework. junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:eclecun.tin.ripal.tr org Führen Sie (TestExecution.java:38) unter org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) unter org.eclipse.jdt.internal.junit.runner.RemoteTestRunner (RemoteTestRunner) aus. java: 683) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java: 390) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRemoteTestRunner: 390) Auslöser: javassist.NotFoundException: $ Proxy88 bei javassist.ClassPool.get (ClassPool.java:436) bei org.powermock.core.classloader.MockClassLoader.loadUnmockedClas s (MockClassLoader.java:180) ... 46 weitere
Wenn ich die Abhängigkeit zu ändere
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
dann bekomme ich eine andere ausnahme. Bitte sehen Siehttps://stackoverflow.com/questions/12176049/suggest-work-around-for-com-thoughtworks-xstream-converters-conversionexception (gestrichene SO-Frage, benötigt 10k).
Ich habe es sogar mit javassist Version 15 versucht, aber das hat das gleiche Problem.