【问题标题】:Unit testing the repository. NHibernate单元测试存储库。休眠
【发布时间】:2012-01-20 08:30:26
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 查看 ayendes 博客中的单元测试 nhibernate
  • @blindmeis 谢谢!这是一篇很棒的文章。

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


【解决方案1】:

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

如果:

我想测试第三方工具

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

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

那么你说的是我喜欢称之为交互测试的东西。重构是必要的,因为您对如何使用 NIBerate 比它是否有效更感兴趣。

我想测试我的代码

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

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

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

【讨论】:

  • 我在存储库中没有嵌入式验证逻辑。所以这是真的,我需要测试代码和工具之间的交互。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我认为要测试您需要使用实际场景的存储库。否则,您没有任何其他地方可以测试数据库访问。模拟存储库不是一个好习惯。因为您没有任何需要在存储库中测试的逻辑。我认为您需要编写调用实际存储库的集成测试才能从中受益。

    【讨论】:

    • 测试,是的。您应该针对实时数据库运行集成测试。但是,这个问题是关于单元测试的。确定使用数据库不是孤立地测试吗?
    • 你认为有没有使用存储库的测试方法调用。因为我不认为存储库有任何需要测试的逻辑。
    • 真的很难。没有太多的逻辑,这是真的。但是,在从数据库读取和写入时可能会发生一些处理和验证/验证。以及解析事物和设置所有对象。因此,您没有必须进行单元测试。但是,如果您想要安全性,那么最好的做法是抽象并使用模拟接口进行测试。
    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多