Arquillian集成测试和OpenJPA增强
我正在使用arquillian和dbunit进行一组集成测试。我可以很好地运行我的一些测试,但那些涉及实体的测试不能运行,这些实体与其中的数据有Arquillian集成测试和OpenJPA增强,jpa,jboss-arquillian,Jpa,Jboss Arquillian,我正在使用arquillian和dbunit进行一组集成测试。我可以很好地运行我的一些测试,但那些涉及实体的测试不能运行,这些实体与其中的数据有oneToMany关系。运行测试时,我会得到一个PersistenceException: Caused by: java.lang.NullPointerException at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.ja
oneToMany
关系。运行测试时,我会得到一个PersistenceException:
Caused by: java.lang.NullPointerException
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:451)
我的测试如下所示:
@RunWith(Arquillian.class)
@CreateSchema("sql/masterplanCreateTables.sql")
public class MasterPlanManagerBeanDbIT {
@Rule
public PersistenceUnitRule rule = new PersistenceUnitRule();
@Inject
private MasterplanManager instance;
@PersistenceContext
EntityManager entityManager;
@Deployment
public static WebArchive createDeployment() throws Exception {
return ShrinkWrap
.create(WebArchive.class, .....
}
@Test
@UsingDataSet("/data/integration/uttrans/masterplan/validData_dbInput.xml")
public void updateTrip_givenValidInput_expectsTripToBeUpdated() {
Trip input = givenTrips().get(0);
input.setNote("updated value");
Trip updated = instance.updateTrip(input);
checkEquality(input, updated);//checks field by field for equality
}
}
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.0.1.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-tomee-embedded</artifactId>
<version>${tomee.version}</version>
<scope>test</scope>
</dependency>
...
</dependencies>
...
我的pom.xml
如下所示:
@RunWith(Arquillian.class)
@CreateSchema("sql/masterplanCreateTables.sql")
public class MasterPlanManagerBeanDbIT {
@Rule
public PersistenceUnitRule rule = new PersistenceUnitRule();
@Inject
private MasterplanManager instance;
@PersistenceContext
EntityManager entityManager;
@Deployment
public static WebArchive createDeployment() throws Exception {
return ShrinkWrap
.create(WebArchive.class, .....
}
@Test
@UsingDataSet("/data/integration/uttrans/masterplan/validData_dbInput.xml")
public void updateTrip_givenValidInput_expectsTripToBeUpdated() {
Trip input = givenTrips().get(0);
input.setNote("updated value");
Trip updated = instance.updateTrip(input);
checkEquality(input, updated);//checks field by field for equality
}
}
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.0.1.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-tomee-embedded</artifactId>
<version>${tomee.version}</version>
<scope>test</scope>
</dependency>
...
</dependencies>
...
。。。
org.jboss.arquillian
阿奎利安bom
1.0.1.最终版本
进口
聚甲醛
...
org.jboss.arquillian.junit
arquillian junit容器
测试
org.apache.openejb
阿奎利安大部头
${tomee.version}
测试
...
...
我确实尝试了openjpamaven插件
在构建时增强实体,但这将改变编译后的实体,这些实体稍后将部署到我们的生产环境中(使用部署时增强)
考虑到这一点,是否可以在我的arquillian测试中启用部署时间增强功能?当我使用openJpa时,我发现这个链接非常有用:
我只是将openejb java代理提供给maven surefire插件。当我使用openJpa时,我发现这个链接非常有用:
我只是将openejb java代理提供给maven surefire插件。如果您使用eclipse,请向测试的VM参数添加-javaagent:{your java agent path} 在我的例子中,我直接从TomEE安装中获取java代理
如果您正在使用eclipse,请将-javaagent:{your java agent path}添加到测试的VM参数中 在我的例子中,我直接从TomEE安装中获取java代理
切换到托管/远程容器如何?嵌入式容器有时不利于运行时增强,这取决于JPA提供程序的能力。切换到托管/远程容器如何?嵌入式容器有时不利于运行时增强,这取决于JPA提供程序的能力。