Spring.net + Nhibernate集成测试在不应该通过的情况下通过

时间:2020-03-06 14:39:37  来源:igfitidea点击:

我使用带有NHiberante(HibernateTemplate)的Spring.net来实现我的DAO。

我还进行了一些集成测试,这些测试从'AbstractTransactionalDbProviderSpringContextTests'扩展而来。

DI运行正常,并且所有测试通过,但有时即使它们不通过也可以通过。

例如,如果我的hbm.xml文件有如下错误:

`<class name =" Confluence.Domain.User" table ="此表不存在">

测试失败,但是如果错误是这样的:

`<多对多
class =" Confluence.Domain.User"
column ="此列不存在" />

测试通过,并悄无声息地隐藏了该错误。

我正在使用SetComplete()对其进行测试,并检查数据库中的更改,但是我认为这种测试的整个思路并非如此。

谁能告诉我如何解决此问题?

非常感谢你!

@Ben:如果我必须实际执行SQL脚本以查看它们是否有效,那么使用这种Spring测试有什么好处?

解决方案

如果映射中存在语法错误,则NHibernate将在config.BuildSessionFactory()上失败

但是对于拼写错误/不存在的数据库对象,NHibernate知道的唯一方法是实际运行查询...因此,我们可以使用一些集成测试来测试单个实体上的插入/选择,以确保它可以正常工作。

虽然不确定与Spring.NET有什么关系。

测试基于NH的DAO时,应刷新会话,以便使用新信息更新数据库,但仍像以前一样回滚。 http://forum.springframework.net/showthread.php?t=5246在此说明了如何执行此操作。我已将此添加到参考文档中。希望这可以帮助。

干杯,
标记