我在课堂上有两个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
。我以为数据库在测试之间回滚(我不应该得到这个错误)。我在这里做错了什么?
答案 0 :(得分:0)
我的建议:
在此课程中添加static transactional = false
。 原因在于,在事务中执行的服务以及集成测试也是如此。因为已经存在一个事务处理,所以没有绑定到服务方法的事务(您可能在测试中调用)。因此,回滚永远不会发生。
我们进行的任何非事务性测试都需要添加适当的tearDown
代码。
另一种解决方案:
只需将此课程设为单元测试即可。回滚将正常工作。