单元测试 - 模拟服务和存储库/工作单元层

问题描述

在我当前的实现中,我使用域服务层通过工作单元注入存储库。

在某些情况下,我会将其他服务注入到我的服务中。

但是,在进行单元测试时,我发现 Mock 这些对象很困难,因为每当 Service 类注入与其他服务的依赖项时,我都需要模拟该其他服务的依赖项。

如何让它以简单的方式工作?

我是否错误地使用了图层?

例如:

public class ValueService : IValueService
    {
        private readonly ITestService _testService;
        private readonly IOptionService _optionService;


        public ValueService (IUnitOfWork unitOfWork,ITestService testService,IOptionService optionService) : base(unitOfWork)
        {
            _testService = testService;
            _optionService = optionService;
        }

当我要模拟 ValueService 类时,我需要模拟 TestServiceOptionService 以及它们的依赖项。

你能帮我考虑一下我正在实施的这个架构吗?

解决方法

你可以试试下面的代码。我希望它有所帮助。

您可以注入所有服务和存储库。

public class ValueServiceTest
{
   private readonly IValueService _valueService;

   public ValueServiceTest()
   {
       _valueService = GetService();
   }

   ***********************
   Your test methods.
   ***********************

   private ValueService GetService()
   {
       var services = new ServiceCollection();
       
       services.AddScoped<IUnitOfWork,UnitOfWork>();
       services.AddScoped<IValueService,ValueService>();
       services.AddScoped<ITestService,TestService>();
       services.AddScoped<IOptionService,OptionService >();
       
       **********************************
       You can inject repositories here. 
       **********************************

       var serviceProvider = services.BuildServiceProvider();

       return serviceProvider.GetService<IValueService>();
   }

}