2010-11-12 58 views
1

我试图测试我的代码,使用JBoss Seam和Hibernate编写。我想要实现的是:如何在自动化单元或系统测试期间模拟Hibernate错误?

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

我还没有能够确定一个简单的方法来做到这一点。

任何建议,将不胜感激。

回答

0

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

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

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

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

+0

我并没有特别想到我试图测试哪种类型的异常,所以你的消息为我提供了一种前进的方式,谢谢。 – TrueDub 2010-11-15 09:03:52

0

声明:我没有使用过Seam。

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

0

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

的DbUnit用JUnit的作品,并且允许以下内容:

  • 负载数据到DB
  • 执行JUnit测试(其可以查询DB)
  • 除去所述从DB
  • 数据

还有其他的变化,基于配置。

在这样的背景下,您的测试可以加载一个记录,并在一个唯一列中添加一个值。测试然后尝试保存相同的值。现在,您在可重复的受控测试中出现错误情况,并且无需修改项目代码。

+0

使用DBUnit肯定是在我的待办事项列表中,所以我将保存此解决方案以供我实施时使用。感谢回复! – TrueDub 2010-11-12 18:16:58

相关问题