单元测试存储库。 NHibernate的

时间:2012-01-20 08:30:27

标签: c# unit-testing repository sql-server-ce unit-of-work

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

我应该使用SQl CE来测试真实的存储库行为,还是应该重构我的应用程序来支持类似不可知(如Tim Maccharty的书http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470147563,descCd-authorInfo.htmlUnit of Work然后给出我的虚假实现IUnitOfWorkRepository

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

谢谢!

3 个答案:

答案 0 :(得分:3)

问题在于您的测试及其原因。这将回答这个问题。

如果:

我想测试第三方工具

那就是,你在测试NHibernate是否正常工作(不是一种测试 我做)。然后做任何需要,所以不需要重构。放松自己。

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

然后你在谈论我喜欢称之为互动测试的东西。需要重构,因为您对使用NHiberate的方式比对它的工作方式更感兴趣。

我想测试我的代码

完全抽象的NHibernate。做任何必要的......包装?你现在回到单元测试中了。

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

我认为这超出了你的谈话范围。但您可以使用此范围来讨论组件。所以...嗯...值得但不容易。不是单元测试,因此您希望实例化组件/应用程序并像其“用户”那样运行整个事物。我将这些称为“UAT”,通常称为“编码UAT”。

答案 1 :(得分:2)

单元测试是单独测试一个单元。所以,不,如果你要去数据库,它甚至都不是单元测试。 摘要并使用模拟接口测试您的存储库。

答案 2 :(得分:1)

我认为要测试使用实际场景所需的存储库。否则,您没有任何其他地方可以测试数据库访问权限。嘲笑存储库不是一个好习惯。因为您没有任何需要在存储库中进行测试的逻辑。我认为你需要编写集成测试,调用实际的存储库以从中获益。