java - Powermock and Spring cause ConversionException when injecting EntityManager in test -


when attempting combine spring test runner , powermock runner using powermockrule technique, exception thoughtworks xstream library whenever try inject entitymanager using persistencecontext annotation jpa. same test works fine when not using powermockrule. ignore packages powermockloader @ start of test. tried various values @powermockignore solves issues have powermock, however, error still happens when ignoring absolutely every package.

@powermockignore("*") @runwith(springjunit4classrunner.class) @contextconfiguration("/test-configuration.xml") public class springandpowermocktest {     @rule     public powermockrule rule = new powermockrule();      @persistencecontext     private entitymanager manager;      @test     public void test() {     } } 

the exception follows -- links full backtrace on pastebin backtrace exceeded limit question length):

com.thoughtworks.xstream.converters.conversionexception: not call org.springframework.orm.jpa.sharedentitymanagercreator$sharedentitymanagerinvocationhandler.readobject() : not call java.util.concurrent.copyonwritearraylist.readobject() : not call java.security.codesource.readobject() : null

relevant persistence unit:

<persistence-unit name="inmemory">   <provider>org.hibernate.ejb.hibernatepersistence</provider>    <properties>     <property name="hibernate.connection.driver_class" value="org.h2.driver" />     <property name="hibernate.connection.url" value="jdbc:h2:mem:inmemoryunittests;mode=mysql;db_close_on_exit=false" />     <property name="hibernate.connection.username" value="sa" />     <property name="hibernate.connection.password" value="" />     <property name="hibernate.hbm2ddl.auto" value="create-drop" />   </properties> </persistence-unit> 

maven dependencies:

<dependencies> <dependency>         <groupid>org.powermock</groupid>         <artifactid>powermock-module-junit4</artifactid>         <version>1.5.1</version>         <scope>test</scope> </dependency> <dependency>         <groupid>org.powermock</groupid>         <artifactid>powermock-api-mockito</artifactid>         <version>1.5.1</version>         <scope>test</scope> </dependency> <dependency>         <groupid>org.mockito</groupid>         <artifactid>mockito-core</artifactid>         <version>1.9.5</version>         <scope>test</scope> </dependency> <dependency>         <groupid>org.powermock</groupid>         <artifactid>powermock-api-easymock</artifactid>         <version>1.5.1</version>         <scope>test</scope> </dependency> <dependency>         <groupid>org.powermock</groupid>         <artifactid>powermock-module-junit4-rule</artifactid>         <version>1.5.1</version>         <scope>test</scope> </dependency> <dependency>         <groupid>org.powermock</groupid>         <artifactid>powermock-classloading-xstream</artifactid>         <version>1.5.1</version>         <scope>test</scope> </dependency> </dependencies> 

testing using spring 3.2.3.release. note have tested spring-test version 3.0.5.release indeed resolve other errors spring/powermock combination, not one.

i had similar issue , suggested me create resources.java class produced entity manager.

@stateful public class resources implements serializable {      @persistencecontext (type = persistencecontexttype.transaction)     private entitymanager entitymanager;      @produces     public entitymanager getentitymanager() {         return entitymanager;     }  } 

i'm still not sure why solution worked me... did.

v/r ace


Comments