0

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。我认为数据库在测试之间回滚(我不应该得到这个错误)。我在这里做错了什么?

4

1 回答 1

0

我的建议:

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

另一种解决方案:

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

于 2013-09-16T07:21:18.757 回答