我想只包含相关代码。
void testSaveQuestion_WrongRaceId(){
...
controller.savequestion(raceGroup.id)
...
}
保存问题控制器使用默认为事务的服务方法。对服务的调用方法如下所示。
def savequestion(Long id){
try {
surveyService.saveQuestion(id, params, question, event)
}
catch (ValidationException e) {
}
}
如果我设置
static transactional = false
然后它的工作原理。即如果在服务方法中抛出异常,则它会回滚。
但如果我发表评论
//static transactional = false
然后失败了。即如果在服务方法中抛出异常则它不会回滚。
我通过断言数据库中的条目来检查这种回滚行为。例如,如果存在异常,则不应将问题保存在数据库中,但如果没有异常,则问题的计数为1.
所以我想知道为什么在进行集成测试时抛出异常后服务方法不会回滚?为什么只有在集成测试类中使用transactional = false之后才能工作。请注意我使用的是Grails 2.2
我感谢任何帮助!