【发布时间】:2015-04-22 15:24:42
【问题描述】:
我正在做一些集成测试,我需要在测试之间清理数据库,这样我才能做出正确的断言,而且测试不会导致像 Failed while seeding database 或 Unable to clean database. 这样的错误。
pom:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.2.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.2.Final</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-embedded-3.1</artifactId>
<version>1.0.0.CR4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-persistence-api</artifactId>
<version>1.0.0.Alpha5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-persistence-impl</artifactId>
<version>1.0.0.Alpha5</version>
<scope>test</scope>
</dependency>
一些测试类:
@RunWith(Arquillian.class)
@UsingDataSet("datasets/empty.yml")
public class SomeServiceCase {
@EJB
SomeService someService;
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addPackages(true, "vo")
.addPackages(true, "service")
.addPackages(true, "domain")
.addAsManifestResource("test-persistence.xml", ArchivePaths.create("persistence.xml"));
}
@Test
@UsingDataSet("datasets/someModel/someModels.yml")
@Cleanup(phase = TestExecutionPhase.AFTER, strategy = CleanupStrategy.STRICT)
public void teastSomething() {
//modifies database content here
}
@Test
@UsingDataSet("datasets/someModel/someModels.yml")
@Cleanup(phase = TestExecutionPhase.AFTER, strategy = CleanupStrategy.STRICT)
public void testSomethingElse() {
//needs initial database content for tests to work
}
严格的清理策略应该清除数据库,但由于外键而失败。所以我尝试通过向arquillian.xml 添加属性来禁用Referential Integrity
<property name="initStatement">SET REFERENTIAL_INTEGRITY FALSE</property>
我怎样才能实现我想要的?有什么想法吗?
【问题讨论】:
标签: java integration-testing jboss-arquillian