如何在自动化单元或系统测试期间模拟Hibernate错误?

时间:2010-11-12 17:14:13

标签: hibernate testing seam

我正在尝试使用JBoss Seam和Hibernate编写我的代码。我想要实现的是:

执行SeamT​​est自动化测试以在Seam组件上运行特定方法。此组件执行数据库更新(合并或保存)。我想导致此更新失败,允许我测试我的错误处理代码并确保我的代码正常恢复。

我无法确定一种简单的方法。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:0)

免责声明:我没有使用过Seam。

假设一个单元测试是一个事务,在数据库更新足够后不会抛出RuntimeException吗?

答案 1 :(得分:0)

我没有使用Seam,但我在Hibernate项目中使用了DbUnit。

DbUnit与JUnit一起使用,并允许以下内容:

  • 将数据加载到数据库
  • 执行JUnit测试(可以查询数据库)
  • 从数据库中删除所述数据

根据配置还有其他变体。

在此背景下,您的测试可以加载到具有唯一列值的记录中。然后测试尝试保存相同的值。现在,您在可重复的受控测试中遇到错误情况,而无需修改项目代码。

答案 2 :(得分:0)

由于Hibernate中的(模拟)故障或者您的实体验证没有成功,更新是否会失败?我声称你很难遇到前一种情况。我从未遇到过不是由我的代码引起的Hibernate问题。对于这种情况,您必须确保在发生Hibernate异常时回滚事务。通常,如果您使用@Transactional在Seam中注释了您的操作方法,则应在RuntimeException上回滚您的交易(每个HibernateExceptionRuntimeException)。

对于后一种情况(测试您的实体验证),您可以创建一个ComponentTest,向您的更新方法发送无效实体。

您可以检查的另一种情况是,如果您使用要更新的null实体或使用数据库中不存在的实体调用您的方法,会发生什么。

如果您发布更新方法的代码,我会尝试提供更多建议。