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

sti*_*k81 2 c# database nhibernate unit-testing fluent-nhibernate

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

现在,当涉及到单元测试时,对我来说似乎很自然的是向行为类注入一些东西,以便它们将获得用于测试的SQLite数据库,或者真实数据库,但是这是配置的.这有意义吗?我无法决定注入的是什么.

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

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

Dan*_*ger 6

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