![]() |
1
1
您是否使用任何类型的IOC集装箱? Unity 是我选择的容器,它包含 ContainerControledLifetimeManager 这使你的班成了单身汉,但不是你自己管理的。 |
![]() |
2
3
我希望对TDD友好,您的意思是“可测试的”代码。对于单例ObjectX,我认为最常见的方法是 分担责任 “控制创建”到另一个类的(srp),这样ObjectX就可以完成它应该做的所有事情。 然后,您有另一个类objectxfactory或host,或者您想称之为的任何东西,它负责为所有客户机提供一个实例(并在需要时提供线程同步,等等)。
您只需要教育并遵守团队约定,即不调用ObjectX构造函数-始终使用ObjectXFactory.CreateInstance()。(如果您发现您有意识/纪律问题,则将ObjectX的ctor标记为内部的,并且只能通过 InternalsVisibleToAttribute ) 高温高压 |
![]() |
3
2
TDD部分的一个答案是学习模仿。 看看斯蒂芬·沃尔特的这篇优秀文章: http://stephenwalther.com/blog/archive/2008/03/23/tdd-introduction-to-rhino-mocks.aspx |
![]() |
4
1
在考虑单例之前,考虑缓存实例以提高性能。但是对于TDD友好的设计,考虑策略注入,以便“慢”位可以被删除用于测试,并替换为存根和模拟。如果可以,尽量不要在测试中进行db调用。 |
![]() |
5
1
你不能这样做——至少在真正的TDD意义上是不行的。 依赖DI/IOC策略(如Unity)意味着您的测试依赖于外部组件,而不是孤立测试。 然后这些测试变成集成测试,而不是单元测试。 ==忽略下面的答案== 我想你想知道如何使存储库可测试。 为它引入一个接口将允许您模拟或存根它。 从而确保可以独立于存储库的任何具体实现来测试对象。 我用这个来说明 Rhino Mocks 3.5 for .NET 3.5 :
让我们从存储库中创建一个接口,让我们调用它
现在,由于您需要对两个不同的对象使用IRepository,那么让我们只使用泛型,这样您就可以用它来实例化存储库:
当然,这意味着您将拥有某种查找方法:
其中,criteria对象是允许您设置要查找的对象,例如,where子句。 现在,您有了您的对象:
你想测试一下
请注意,上面的代码并不是TDD在所有方面的最佳实践,但它是一个开始的地方。 这里的关键概念是 引入接口以允许对象的松散耦合 尤其是当对象倾向于执行诸如访问数据库、文件系统等操作时。 有一个更全面的例子和更好的例子 Ben Hall's article on Rhino Mocks . |
![]() |
M.Sabzi · 如何在应用层实现随子集合创建? 7 年前 |
![]() |
JJ Yong · 继承的通用存储库问题 7 年前 |
![]() |
Utku · 实体框架,从多个表中获取数据并选择要显示的列 7 年前 |
![]() |
koryakinp · 基于实体类型的通用存储库应用过滤器 7 年前 |
![]() |
Pedro Lopes · 尝试通过存储库编辑数据库中的数据时获取验证 7 年前 |
![]() |
The Huff · IOption模式-单元测试和通过层 7 年前 |