好的,所以我最近一直在尝试进入 IoC。然而,我一直遇到一个障碍——这就是我喜欢使用模拟对象的事实。
它们可以快速轻松地设置。
但是,如果我在代码中到处使用 IoC,那么它会迫使我创建对象的测试实现(和配置),而不是使用模拟对象(即使用 moq)。
最终结果是我最终得到了大量用于测试的配置文件。
此外,在许多测试场景中,我需要在测试到测试的基础上从我的类(class)中获得不同的行为。使用 moq 对象,这非常容易。你会如何用 IoC 做类似的事情?
任何帮助将非常感激。
谢谢,
麦克风
最佳答案
IoC 应该使使用模拟对象更容易,而不是更难。
几个 IoC 容器框架将允许您定义要注入(inject)的预先存在的对象;与 Moq您只需为 myMockObject.Object 设置它。
编辑:配置示例 Unity用一个模拟:
var mockService = new Mock<IMyService>();
container.RegisterInstance<IMyService>(mockService.Object);
作为替代方案,您可以将模拟对象传递给被测类的构造函数(用于构造函数注入(inject)),并在单元测试中完全绕过 IoC 容器。
编辑:乔希的回答是替代方案的一个很好的例子。我通常会采用他的解决方案,而不是重新配置容器。
关于tdd - 单元测试、模拟对象和 ioc 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698245/