8

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

我正在使用 FluentNhibernate 进行映射,但使用 XML 映射文件获得大致相同的时间。对我来说,3-4 秒的延迟严重扰乱了我的流程。

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

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

4

4 回答 4

14

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

我有一套单独的测试,明确测试存储库层和 NHibernate 映射。而这些通常不会像它们上面的业务和 gui 逻辑那样改变。

这样我就得到了非常快的单元测试,它永远不会碰到数据库,而且仍然是一个经过良好测试的数据库层

于 2008-12-02T08:52:35.873 回答
4

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

于 2008-12-02T20:07:20.053 回答
1

http://www.autumnofagile.nethttp://www.summerofnhibernate.com

于 2008-12-01T22:34:50.583 回答
0

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

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

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

于 2008-12-01T23:07:20.860 回答