使用NHibernate编写单元测试的最佳实践

时间:2009-12-29 18:16:45

标签: c# database unit-testing nhibernate fluent-nhibernate

我是NHibernate(+ Fluent)的新手,在构建我的代码以使其可测试时,我无法决定什么是最佳策略。我有一个简单的结构,包括域模型,将模型映射到数据库的映射,以及一些具有行为的类,这些行将用于模型类并执行更新和从数据库读取数据的事务。我对此有更多的了解,但这与此无关。

现在,当谈到单元测试时,对我来说似乎很自然的是将某些东西注入到行为类中,这样它们就会获得用于测试的SQLite数据库,或者真正的数据库,但这是配置。这有意义吗?我无法决定注入的是什么

  • 我可以注入ISession,但我想我会为每个会话使用新会话吗?如果是这样,我需要外面的东西来创建会话,这可能只是解决问题?
  • 我可以注入SessionSource吗?在这种情况下,行为类可以使用它自己创建会话。但是,我看到SessionSource用于BuildSchema - 我认为我只想做一次?
  • 我看到的第三个选项 - 以及我迄今为止所做的 - 是创建一个为我创建会话的SessionFactory。使用这个我可以添加一个using子句,并在函数完成时释放会话。我有一个SessionFactory接口和一个常规和单元测试实现。注入常​​规或单元测试实现,我得到了正确数据库的会话。

我是否在正确的轨道上?我应该如何使用NHibernate为代码编写单元测试来编写代码?我应该注意哪些最佳实践?

1 个答案:

答案 0 :(得分:5)

您可以查看Ayende撰写的这篇博文: Nhibernate Unit Testing。他有一个测试基类,用于在内存数据库(sql lite)中配置会话。这似乎与您的第三种选择类似。