如何使用NHibernate有效地进行TDD?

时间:2008-12-01 22:30:18

标签: unit-testing nhibernate fluent-nhibernate tdd

在我看来,大多数人在使用NHibernate时会针对像SQLite这样的内存中进程数据库编写测试。我已经启动并运行了,但我的第一个测试(使用NHibernate)总是需要3-4秒才能执行。下一个测试运行得更快。

我使用FluentNhibernate进行映射,但使用XML映射文件获得大致相同的时序。对我而言,3-4秒的延迟严重扰乱了我的流量。

使用TDD和NHibernate的推荐方法是什么?

是否可以模拟ISession对实际查询进行单元测试,或者只能在内存数据库中完成?

4 个答案:

答案 0 :(得分:14)

我使用存储库模式来执行数据库操作,每当我运行测试时,我只运行更高级别的测试,只需模拟存储库(使用RhinoMocks)。

我有一套独立的测试,可以显式测试Repository层和NHibernate映射。而那些通常不会像业务和gui逻辑那样改变它们。

这样我就可以获得非常快速的单元测试,而这些单元测试从未打到数据库,而且仍然是经过良好测试的数据库层

答案 1 :(得分:4)

单元测试数据访问是不可能的,但您可以对其进行集成测试。 我在单元测试的单独项目中为我的数据访问创建集成测试。当我在存储库,映射或数据库模式中更改某些内容时,我只运行(慢)集成测试。 因为集成测试没有与单元测试混合,我仍然可以每天运行大约100次单元测试而不会生气。

答案 2 :(得分:1)

答案 3 :(得分:0)

您是否尝试更改可选配置属性中的某些默认值?减速很可能与nhibernate对代码生成的某些优化有关。

http://nhibernate.info/doc/nh/en/index.html#configuration-optional

内存数据库似乎是测试数据层的最快方法。一旦你开始测试你的数据层,你似乎已经超出了单元测试的范围。