Pobieranie javassist.NotFoundException za pomocą PowerMock i PowerRule w JUnit z Mockito

Zintegrowałem PowerMock i PowerRule w JUnit z Mockito.

Oto moje zależności:

<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>

Moja klasa testowa to:

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 nazywa metodę statyczną, którą muszę wyśmiać. Kiedy uruchamiam mój test, otrzymujęjavassist.NotFoundException: $Proxy88.

Ślad pełnego stosu:

java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 na org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) w org.powermock.core.classloader.MockClassLoader.loadModifiedClass (MockClassLoader.java:147) w org.powermock.core.classloader.DeferSupportingClassLoader.loadClass (DeferSupportingClassLoader.java:67) w java.lang.ClassLoader.loadClass (ClassLoader.java:252) w java.lang.ClassLoader.loadClassInternal (ClassLoader.java:320) o java.lang.Class.forName0 (Metoda rodzima) w java.lang.Class.forName (Class.java:247) w org.powermock.api.support.ClassLoaderUtil.loadClass (ClassLoaderUtil.java:66) na org.powermock. api.support.ClassLoaderUtil.loadClass (ClassLoaderUtil.java:26) w org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:243) w org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) w org .powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) na org.powermock.classloading.DeepCloner.perform Clone (DeepCloner.java:128) w org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) w org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) w org.powermock.classloading.DeepCloner .cloneFields (DeepCloner.java:248) w org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) w org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) w org.powermock.classloading. DeepCloner.performClone (DeepCloner.java:128) w org.powermock.classloading.DeepCloner.cloneFields (DeepCloner.java:248) w org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) w org.powermock.classloading .DeepCloner.cloneFields (DeepCloner.java:248) w org.powermock.classloading.DeepCloner.performClone (DeepCloner.java:128) w org.powermock.classloading.DeepCloner.clone (DeepCloner.java:82) na org.powermock. classloading.DeepCloner.clone (DeepCloner.java:69) w org.powermock.classloading.ClassloaderExecutor.execute (ClassloaderExecutor.java:89) w org. powermock.classloading.ClassloaderExecutor.execute (ClassloaderExecutor.java:78) w org.powermock.modules.junit4.rule.PowerMockStatement.evaluate (PowerMockRule.java:49) w org.springframework.test.context.junit4.statements.SpringRepeat. oceniaj (SpringRepeat.java:72) na org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:231) na org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:50) na org.junit .runners.ParentRunner $ 3.run (ParentRunner.java:193) w org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:52) w org.junit.runners.ParentRunner.runChildren (ParentRunner.java:191) at org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:42) na org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:184) na org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks. Oceń (RunBeforeTestClassCallbacks.java:61) na org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31 ) na org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:71) w org.junit.runners.ParentRunner.run (ParentRunner.java:236) na org.springframework.test.context. junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:174) w org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) w org.eclipse.jdt.internal.junit.runner.TestExecution. uruchom (TestExecution.java:38) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner. java: 683) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Przyczyna: javassist.NotFoundException: $ Proxy88 w javassist.ClassPool.get (ClassPool.java:436) w org.powermock.core.classloader.MockClassLoader.loadUnmockedClas s (MockClassLoader.java:180) ... 46 więcej

Jeśli zmienię zależność od

<dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-classloading-xstream</artifactId>
            <version>1.4.12</version>
            <scope>test</scope>
        </dependency>

wtedy dostaję inny wyjątek. Proszę zobaczyćhttps://stackover.com/questions/12176049/suggest-work-around-for-com- thoughtworks-xstream-converters-conversionexception (usunięte pytanie SO wymaga 10k).

Próbowałem nawet z wersją javassist 15, ale ma ten sam problem.

questionAnswers(4)

yourAnswerToTheQuestion