我正在使用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"/>

测试通过默默隐藏bug。

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

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

非常感谢!

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

有帮助吗?

解决方案

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

上失败

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

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

其他提示

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

干杯, 标记

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top