单元测试存储库.NHibernate

本文关键字:NHibernate 存储 单元测试 | 更新日期: 2023-09-27 18:20:48

我有一个基于NHibernate(构造函数ISessionFactory注入)的通用存储库实现,它存储在DAL中。它实现了存储在"域层"中的合约。

我应该使用SQl CE测试真实的存储库行为,还是应该重构我的应用程序以支持不可知论(如Tim Maccharty的书中所述http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470147563,descCd authorInfo.html)Unit of Work,然后给出我对IUnitOfWorkRepository的伪实现?

在暴露真实存储库实现的本地数据库上运行测试是一种有效的方法吗?

谢谢!

单元测试存储库.NHibernate

问题是您正在测试什么以及为什么要测试。这将回答问题。

如果:

我想测试第三方工具

也就是说,你在测试NHibernate是否有效(不是一种测试我愿意)。然后做它需要的任何事情,所以不需要重构。放松自己。

我想测试我的代码如何与第三方工具交互

然后你说的是我喜欢称之为交互测试的东西。重构是必需的,因为你更感兴趣的是如何使用NHiberate,而不是它是否工作。

我想测试我的代码

抽象的NHibernate完全。做任何必要的事。。。包装?您现在回到单元测试。

我想从用户的角度测试我的应用程序

我认为这超出了你的讨论范围。但是您可以使用这个范围来谈论组件。所以嗯。。。有价值但不容易。不是单元测试,所以你想实例化组件/应用程序,并像它的"用户"一样运行整个过程。我称这些为"UAT",通常实现为"编码UAT"。

单元测试是在隔离状态下测试单元。所以,不,如果你要去数据库,这甚至不是一个单元测试。抽象出来,用模拟的接口测试你的存储库。

我认为要测试存储库,需要使用实际场景。否则,您将没有任何其他地方来测试数据库访问。嘲笑存储库不是一个好的做法。因为您没有任何需要在存储库中测试的逻辑。我认为您需要编写集成测试,它调用实际的存储库才能从中获得任何好处。