Files
DMS/DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs

69 lines
2.6 KiB
C#
Raw Normal View History

// DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs
using AutoMapper;
using AutoMapper.Internal;
using DMS.Application.Interfaces;
2025-09-16 12:29:09 +08:00
using DMS.Application.Interfaces.Database;
using DMS.Application.Services;
2025-09-16 12:29:09 +08:00
using DMS.Application.Services.Database;
using DMS.Core.Interfaces;
using DMS.Core.Interfaces.Repositories;
using DMS.Infrastructure.Data;
using DMS.Infrastructure.Repositories;
using Microsoft.Extensions.DependencyInjection;
using DMS.Infrastructure.Configurations;
namespace DMS.Infrastructure.UnitTests.Services;
public class BaseServiceTest
{
// ServiceProvider 将是所有测试的服务容器
protected readonly IServiceProvider ServiceProvider;
public BaseServiceTest()
{
var services = new ServiceCollection();
// --- 核心配置 ---
services.AddAutoMapper(cfg =>
{
// 最终解决方案根据异常信息的建议设置此标记以忽略重复的Profile加载。
// 注意:此属性位于 Internal() 方法下。
cfg.Internal().AllowAdditiveTypeMapCreation = true;
cfg.AddProfile(new DMS.Application.Profiles.MappingProfile());
cfg.AddProfile(new DMS.Infrastructure.Profiles.MappingProfile());
});
// 2. 配置数据库上下文 (在测试中通常使用单例)
services.AddSingleton<SqlSugarDbContext>(_ =>
{
var appSettings = new AppSettings { Database = { Database = "dms_test" } };
return new SqlSugarDbContext(appSettings);
});
// --- 注册服务和仓储 ---
// 使用 Transient 或 Scoped 取决于服务的生命周期需求对于测试Transient 通常更安全。
// 注册仓储管理器
services.AddTransient<IRepositoryManager, RepositoryManager>();
services.AddTransient<IInitializeRepository, InitializeRepository>();
// 注册应用服务
2025-07-24 19:51:16 +08:00
services.AddTransient<IDeviceAppService, DeviceAppService>();
services.AddTransient<IVariableTableAppService, VariableTableAppService>();
2025-07-24 21:41:00 +08:00
services.AddTransient<IVariableAppService, VariableAppService>();
// services.AddTransient<IVariableAppService, VariableAppService>(); // 如果需要测试 VariableService取消此行注释
// ... 在这里注册所有其他的应用服务 ...
// --- 构建服务提供程序 ---
ServiceProvider = services.BuildServiceProvider();
// 验证 AutoMapper 配置 (可选,但强烈推荐)
var mapper = ServiceProvider.GetService<IMapper>();
mapper?.ConfigurationProvider.AssertConfigurationIsValid();
}
}