问题描述
在我当前的实现中,我使用域服务层通过工作单元注入存储库。
在某些情况下,我会将其他服务注入到我的服务中。
但是,在进行单元测试时,我发现 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
类时,我需要模拟 TestService
和 OptionService
以及它们的依赖项。
你能帮我考虑一下我正在实施的这个架构吗?
解决方法
你可以试试下面的代码。我希望它有所帮助。
您可以注入所有服务和存储库。
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>();
}
}