我的Junit测试使用DBUnit,从Eclipse运行时运行正常。但是,使用Maven运行相同的测试失败了一个测试:
integrity constraint violation: foreign key no action
我已经尝试连续多次运行该测试和eclipse GUI中的整套测试(“作为JUnit测试运行”)并且它们永远不会失败 - 但是从Maven它们确实失败了。
我为每个测试使用@DatabaseSetup,但它是否足以真正重置数据库?我还认为Maven可以并行运行测试,所以我尝试在我的pom.xml中为我们的Surefire插件设置forkMode“always”,但它没有改变任何东西。
答案 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.