为什么测试用例需要@Transactional,其功能将在dao层中进行更新(JPA存储库),如
@Test
@Transactional
public void processTestSuccess() throws Exception{
abc.process();//abc instance of Abc class
}
public class Abc{
@Transactional
public void process(){
.....
jpaRepository.update(10); // spring jpa repo updating something
}
}
在运行不带@Transaction批注的测试时,在行上会出现以下异常
jpa.update(10);
org.springframework.dao.InvalidDataAccessApiUsageException:执行中 更新/删除查询;嵌套异常为 javax.persistence.TransactionRequiredException:执行 更新/删除查询
答案 0 :(得分:0)
您的方法process()
用@Transactional
注释。这意味着它需要进行交易。
由于您似乎在Spring应用程序上下文中运行此代码,因此对注释进行了评估,并且如果现在有事务可用,则会引发异常。
通过将@Transactional
添加到测试中,可以使事务可用(该事务将在测试结束时回滚)。