c# - 在大型依赖对象图上注入(inject)模拟

标签 c# unit-testing dependency-injection moq autofixture

对于要测试的对象,我有一个相当重要的依赖关系图。无需在所有地方注册模拟即可解决我的依赖关系的最简单方法是什么?

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

  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/

相关文章:

angular - 在 Angular 中注入(inject)多个实例

c# - MEF 导入为空

c# - 如何将 BitmapImage 转换为 Icon?

ios - Cocoapods 单元测试目标问题

c# - Protobuf-net 序列化创建十六进制字符

unit-testing - 在 meteor 下用 Mocha/Chai 测试时 Vue $el 未定义

对注入(inject)了另一个 ejb 的 ejb3.0 进行单元测试

c# - 在没有构造函数注入(inject)的情况下使用 AutoFac

c# - 我什么时候应该使用 "Hidden TextBox"什么时候应该使用 (html5) "data-attribute"?

c# - 对象摘要中的换行符