0

我正在使用 Spring.net 和 NHiberante (HibernateTemplate) 来实现我的 DAO。

我还有一些从“AbstractTransactionalDbProviderSpringContextTests”扩展而来的集成测试。

DI 工作正常,所有测试都通过了,但有时即使不应该通过,它们也会通过。

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

<class name="Confluence.Domain.User" table="THIS TABLE DOES NOT EXIST">

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

<many-to-many class="Confluence.Domain.User" column="THIS COLUMN DOES NOT EXIST"/>

测试通过默默地隐藏错误。

我正在使用 SetComplete() 对其进行测试并检查数据库的更改,但我认为这种测试的整个想法不是这样做。

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

非常感谢你!

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

4

2 回答 2

2

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

干杯,马克

于 2008-12-30T19:50:18.663 回答
1

如果您的映射中有语法错误,那么 NHibernate 将在 config.BuildSessionFactory() 上失败

但是对于拼写错误/不存在的数据库对象,NHibernate 知道的唯一方法是实际运行查询......所以您可能会使用一些集成测试来测试单个实体上的插入/选择,以确保它有效。

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

于 2008-09-24T13:09:18.270 回答