我试图测试我的代码,使用JBoss Seam和Hibernate编写。我想要实现的是:如何在自动化单元或系统测试期间模拟Hibernate错误?
执行SeamTest自动化测试以在Seam组件上运行特定的方法。该组件执行数据库更新(合并或保存)。我想让这个更新失败,让我测试我的错误处理代码,并确保我的代码恢复正常。
我还没有能够确定一个简单的方法来做到这一点。
任何建议,将不胜感激。
我试图测试我的代码,使用JBoss Seam和Hibernate编写。我想要实现的是:如何在自动化单元或系统测试期间模拟Hibernate错误?
执行SeamTest自动化测试以在Seam组件上运行特定的方法。该组件执行数据库更新(合并或保存)。我想让这个更新失败,让我测试我的错误处理代码,并确保我的代码恢复正常。
我还没有能够确定一个简单的方法来做到这一点。
任何建议,将不胜感激。
由于Hibernate中的(模拟)故障或实体验证失败而导致更新失败?我声称你很难碰到前一种情况。我从来没有遇到过不是由我的代码引起的Hibernate问题。对于这种情况,如果发生Hibernate异常,您必须确保您的事务处于回滚状态。通常情况下,如果您在Seam中使用@Transactional
注释了您的操作方法,那么您的交易应回滚到RuntimeException
(每个HibernateException
是RuntimeException
)。
对于后一种情况(测试您的实体验证),您可以创建一个向您的更新方法发送无效实体。
您可以检查的另一种情况是,如果您使用要更新的实体或使用DB上不存在的实体调用您的方法,会发生什么情况。
如果您发布了更新方法的代码,我会尝试提供更多建议。
声明:我没有使用过Seam。
假设一个单元测试是一个事务,在数据库更新后不会抛出RuntimeException就足够了?
我没有使用过Seam,但我在Hibernate项目中使用了DbUnit。
的DbUnit用JUnit的作品,并且允许以下内容:
还有其他的变化,基于配置。
在这样的背景下,您的测试可以加载一个记录,并在一个唯一列中添加一个值。测试然后尝试保存相同的值。现在,您在可重复的受控测试中出现错误情况,并且无需修改项目代码。
使用DBUnit肯定是在我的待办事项列表中,所以我将保存此解决方案以供我实施时使用。感谢回复! – TrueDub 2010-11-12 18:16:58
我并没有特别想到我试图测试哪种类型的异常,所以你的消息为我提供了一种前进的方式,谢谢。 – TrueDub 2010-11-15 09:03:52