我正在尝试使用JBoss Seam和Hibernate编写我的代码。我想要实现的是:
执行SeamTest自动化测试以在Seam组件上运行特定方法。此组件执行数据库更新(合并或保存)。我想导致此更新失败,允许我测试我的错误处理代码并确保我的代码正常恢复。
我无法确定一种简单的方法。
任何建议都将不胜感激。
答案 0 :(得分:0)
免责声明:我没有使用过Seam。
假设一个单元测试是一个事务,在数据库更新足够后不会抛出RuntimeException吗?
答案 1 :(得分:0)
我没有使用Seam,但我在Hibernate项目中使用了DbUnit。
DbUnit与JUnit一起使用,并允许以下内容:
根据配置还有其他变体。
在此背景下,您的测试可以加载到具有唯一列值的记录中。然后测试尝试保存相同的值。现在,您在可重复的受控测试中遇到错误情况,而无需修改项目代码。
答案 2 :(得分:0)
由于Hibernate中的(模拟)故障或者您的实体验证没有成功,更新是否会失败?我声称你很难遇到前一种情况。我从未遇到过不是由我的代码引起的Hibernate问题。对于这种情况,您必须确保在发生Hibernate异常时回滚事务。通常,如果您使用@Transactional
在Seam中注释了您的操作方法,则应在RuntimeException
上回滚您的交易(每个HibernateException
为RuntimeException
)。
对于后一种情况(测试您的实体验证),您可以创建一个ComponentTest
,向您的更新方法发送无效实体。
您可以检查的另一种情况是,如果您使用要更新的null
实体或使用数据库中不存在的实体调用您的方法,会发生什么。
如果您发布更新方法的代码,我会尝试提供更多建议。