对于要测试的对象,我有一个相当重要的依赖关系图。无需在所有地方注册模拟即可解决我的依赖关系的最简单方法是什么?
例如,我有一个这样的依赖图:
PublicApi
ApiService
AccountingFacade
BillingService
BillingValidation
BillingRepository
UserService
UserRepository
我想测试 PublicApi.CreateUser()
,我希望它运行所有代码,但我想模拟存储库,这样我就不必向数据库写入任何内容.我是否应该只使用一个 DI 容器并注册我的所有服务,用模拟替换存储库,然后解析 PublicApi
并运行该方法?
我正在研究 AutoFixture,看起来它可能能够处理这样的事情,但我无法完全理解整个“卡住”与“注册”以及它与最小起订量的集成。
最佳答案
对于单元测试,您应该只模拟直接依赖项。在您的情况下,您创建 PublicApi
并为 ApiService
注入(inject)模拟,并验证 PublicApi
是否正在使用 上的正确值调用适当的方法>ApiService
模拟。
与测试所有其他组件的方式相同,这些组件与更深层次的依赖关系隔离开来。
如果您想测试多个组件的组合,那不是单元测试而是集成测试。因此,这取决于您如何将类(class)放在一起。例如如果您使用的是 IoC 容器,它可能支持以某种方式替换存储库的配置。在这种情况下,您可以使用应用程序的配置并用模拟替换存储库和可能的 View 。
关于c# - 在大型依赖对象图上注入(inject)模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983310/