集成测试中的DuplicateKeyException

时间:2013-09-15 22:49:19

标签: testing grails

我在课堂上有两个spock测试。两个测试都具有相同的设置:

Class MySpec {

  def "Test1"() {
    setup:
      def book = new Book(title: 'Something')
      book.id = 1
      book.save(flush: true, failOnError: true)
    // rest of the test
  }

  def "Test2"() {
    setup:
      def book = new Book(title: 'Something')
      book.id = 1
      book.save(flush: true, failOnError: true)
    // rest of the test
  }

}

注意:Book域名中包含assigned id,因此我必须在保存时明确设置。

第一次测试有效,但下一次测试失败,org.springframework.dao.DuplicateKeyException。我以为数据库在测试之间回滚(我不应该得到这个错误)。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我的建议:

在此课程中添加static transactional = false原因在于,在事务中执行的服务以及集成测试也是如此。因为已经存在一个事务处理,所以没有绑定到服务方法的事务(您可能在测试中调用)。因此,回滚永远不会发生。 我们进行的任何非事务性测试都需要添加适当的tearDown代码。

另一种解决方案:

只需将此课程设为单元测试即可。回滚将正常工作。