使用H2和@ContextConfiguration进行Spring + JPA + Hibernate测试

时间:2013-09-10 17:37:13

标签: spring ant junit h2

我有一个Spring + JPA + Hibernate应用程序,我试图通过子类化代码&gt; AbstractJUnit4SpringContextTests来测试。该类允许使用@ContextConfiguration注释指定Spring上下文文件。在此文件中,使用SQL脚本通过<jdbc:embedded-database>元素创建和初始化数据库(模式+数据)。

现在我有两个类加载两个不同的spring上下文文件,但它们都包含这个元素。如果我单独运行每个测试类,所有测试方法都可以正常工作。但是,如果我从一个ant脚本运行它们,那么运行的第二个测试会抱怨因为数据库已经初始化了!这很奇怪,因为我的Ant JUnit目标中有fork="yes" forkmode="perTest"。我不确定为什么会这样。有什么想法吗?

编辑:这是我的蚂蚁脚本的一个片段:

<junit printsummary="withOutAndErr" haltonfailure="yes" fork="yes" forkmode="perTest" maxmemory="512m">
  <classpath refid="mvn.classpath"/>
  <classpath location="${classes-core}"/>
  <classpath location="${classes-pentaho}"/>
  <classpath location="${classes-plugins}"/>
  <classpath location="${junit.classes}"/>
  <classpath location="${junit.resources}"/>
  <sysproperty key="ant.home" value="${ant.home}"/>
  <formatter type="xml"/>
  <batchtest fork="yes" todir="${junit.out.dir.xml}">
    <fileset dir="${junit.classes}" includes="**/*TestSuite.class"/>
  </batchtest>
</junit>

由于

乔瓦尼

1 个答案:

答案 0 :(得分:0)

我找到了一个快速而优雅的解决方案。显然Spring没有重新初始化每个测试的上下文,所以我的H2数据库以某种方式存活了下来。我仍然有点困惑,但在我的测试类中添加以下内容解决了它:

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)