Junit(DBUnit)测试用Maven失败但在Eclipse中失败?

时间:2013-03-14 09:50:01

标签: junit dbunit maven-surefire-plugin

我的Junit测试使用DBUnit,从Eclipse运行时运行正常。但是,使用Maven运行相同的测试失败了一个测试:

integrity constraint violation: foreign key no action

我已经尝试连续多次运行该测试和eclipse GUI中的整套测试(“作为JUnit测试运行”)并且它们永远不会失败 - 但是从Maven它们确实失败了。

我为每个测试使用@DatabaseSetup,但它是否足以真正重置数据库?我还认为Maven可以并行运行测试,所以我尝试在我的pom.xml中为我们的Surefire插件设置forkMode“always”,但它没有改变任何东西。

2 个答案:

答案 0 :(得分:3)

我有一个类似的问题,在maven测试期间引用JVM中使用的编码。

我在pom.xml中添加了以下内容:

<plugins>
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <junitArtifactName>junit:junit</junitArtifactName>
            <encoding>UTF-8</encoding>
            <inputEncoding>UTF-8</inputEncoding>
            <outputEncoding>UTF-8</outputEncoding>
            <argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea
                -Dfile.encoding=UTF-8</argLine>
        </configuration>
    </plugin>
</plugins>

另见http://carlobertoldi.wordpress.com/2012/03/12/maven-unit-tests-and-those-funny-characters/

这解决了我的问题

答案 1 :(得分:1)

您正在使用spring-test DBUnit中的注释@DatabaseSetUp进行数据库初始化。您也应该使用注释@DatabaseTearDown

来自spring-test DBUnit文档:

The @DatabaseTearDown annotation can be used to reset database tables once a test has completed. As with @DatabaseSetup the annotation can be applied at the method or class level. When using @DatabaseTearDown use the value and type attributes in the same way as @DatabaseSetup.