2

我的 Junit 测试使用 DBUnit,从 Eclipse 运行时它们运行良好。但是,使用 Maven 运行相同的测试无法通过以下测试:

integrity constraint violation: foreign key no action

我已经尝试连续几次从 Eclipse GUI(“作为 JUnit 测试运行”)运行该测试和整个测试集,并且它们从未失败 - 但从 Maven 中它们确实失败了。

我对每个测试都使用@DatabaseSetup,但是真的重置数据库就足够了吗?我还认为 Maven 可能会并行运行测试,所以我尝试在 pom.xml 中将 Surefire 插件的 forkMode 设置为“始终”,但它没有改变任何东西。

4

2 回答 2

2

在 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/

这解决了我的问题

于 2013-08-16T06:43:32.293 回答
1

您正在使用@DatabaseSetUp来自spring-test DBUnit的注释进行数据库初始化。您也应该使用注释@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.

于 2013-03-14T13:20:03.817 回答