在大型依赖对象图上注入Mocks

sco*_*ttm 4 c# unit-testing dependency-injection moq autofixture

对于我想要测试的对象,我有一个相当重要的依赖图.解决我的依赖关系而不必在任何地方注册模拟的最简单方法是什么?

例如,我有一个这样的依赖图:

  PublicApi
    ApiService
      AccountingFacade
         BillingService
           BillingValidation
           BillingRepository
         UserService
           UserRepository
Run Code Online (Sandbox Code Playgroud)

我想测试PublicApi.CreateUser(),我想让它运行所有代码,但我想模拟存储库,所以我不必写任何东西到数据库.我应该只使用DI容器并注册我的所有服务,用mocks替换存储库,然后解析PublicApi并运行该方法?

我正在调查AutoFixture,看起来它可能能够处理这样的事情,但我无法完全围绕整个'Freeze'与'Register'进行整合,并且它与Moq集成.

Rem*_*oor 7

对于Unittests,您应该只模拟直接依赖项.在你的情况下,你创建PublicApi并注入一个模拟器,ApiService并验证是否PublicApiApiServiceMock 上使用正确的值调用适当的方法.

与测试与更深层依赖项隔离的所有其他组件的方法相同.

如果要测试多个组件的组合,那不是单元测试,而是集成测试.因此,这取决于你如何将你的课程放在一起.例如,如果您使用的是IoC容器,它可能支持以某种方式替换存储库的配置.在这种情况下,您可以使用应用程序的配置并使用模拟替换存储库以及可能的视图.