【发布时间】:2010-12-27 10:29:14
【问题描述】:
我正在尝试编写易于测试的代码。这导致我避免直接调用 new Class1() 。相反,我通常创建一个接口,一个简单的工厂,带有一个返回此接口的 GetObject() 方法。
它工作正常。我发现的问题是太多的工厂除了调用 new Class1() (或他们负责创建的任何类/接口)之外基本上什么都没有。我不认为为拥有可测试的代码付出很大的代价,但仍然......有没有人使用更好的方法并且仍然实现能够在测试时注入 Class1 的不同实现的目标?
我知道我可以将 Class1 实现公开为属性并在运行时使用默认值,但这意味着我仅限于一个实例,而在许多情况下,我想在每次需要 Class1 时创建一个新实例。
编辑:
我确实使用 IoC,这确实有帮助。尽管如此,我通常最终会在 IoC 配置中将工厂作为依赖项。我的 GetObject 方法通常调用类似 IoC.Resolve 的方法。我更喜欢在工厂中隔离 IoC 依赖,而不是直接在包含业务逻辑的域类中。
【问题讨论】:
-
听起来你需要一个 IoC 容器。
-
@Martinho - 您能否详细说明您的回复并将其作为答案?
标签: unit-testing design-patterns