c# – 在大型依赖对象图上注入Mocks
作者:互联网
对于我想要测试的对象,我有一个相当重要的依赖图.解决我的依赖关系而不必在任何地方注册模拟的最简单方法是什么?
例如,我有一个这样的依赖图:
PublicApi
ApiService
AccountingFacade
BillingService
BillingValidation
BillingRepository
UserService
UserRepository
我想测试PublicApi.CreateUser(),我想让它运行所有代码,但我想模拟存储库,所以我不必向数据库写任何东西.我应该只使用DI容器并注册我的所有服务,用mocks替换存储库,然后解析PublicApi并运行该方法?
我正在调查AutoFixture,看起来它可能能够处理这样的事情,但我无法完全围绕整个’Freeze’与’Register’进行整合,并且它与Moq集成.
解决方法:
对于Unittests,您应该只模拟直接依赖项.在您的情况下,您创建PublicApi并为ApiService注入一个模拟,并验证PublicApi是否在ApiService Mock上使用正确的值调用适当的方法.
与测试与更深层依赖项隔离的所有其他组件的方法相同.
如果要测试多个组件的组合,那不是单元测试,而是集成测试.因此,这取决于你如何将你的课程放在一起.例如如果您使用的是IoC容器,它可能支持以某种方式替换存储库的配置.在这种情况下,您可以使用应用程序的配置并使用模拟替换存储库以及可能的视图.
标签:c,dependency-injection,unit-testing,moq,autofixture 来源: https://codeday.me/bug/20190610/1209308.html