using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using NSubstitute;
using XiangYi.AdminApi;
using XiangYi.Application.Interfaces;
namespace XiangYi.Api.Tests.AdminApi;
///
/// 后台管理API集成测试工厂
///
public class AdminApiWebApplicationFactory : WebApplicationFactory
{
public IAdminAuthService MockAdminAuthService { get; private set; } = null!;
public IAdminUserService MockAdminUserService { get; private set; } = null!;
public IAdminOrderService MockAdminOrderService { get; private set; } = null!;
public IAdminMemberService MockAdminMemberService { get; private set; } = null!;
public IAdminProfileAuditService MockAdminProfileAuditService { get; private set; } = null!;
public IAdminReportService MockAdminReportService { get; private set; } = null!;
public IAdminBannerService MockAdminBannerService { get; private set; } = null!;
public IAdminAccountService MockAdminAccountService { get; private set; } = null!;
public IAdminRoleService MockAdminRoleService { get; private set; } = null!;
public IAdminMenuService MockAdminMenuService { get; private set; } = null!;
public IAdminLogService MockAdminLogService { get; private set; } = null!;
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseEnvironment("Testing");
// 禁用Hangfire
builder.ConfigureAppConfiguration((context, config) =>
{
config.AddInMemoryCollection(new Dictionary
{
["Hangfire:Enabled"] = "false",
["ConnectionStrings:AdminDb"] = "Server=.;Database=TestDb;Trusted_Connection=True;",
["ConnectionStrings:BizDb"] = "Server=.;Database=TestDb;Trusted_Connection=True;",
["ConnectionStrings:HangfireDb"] = "Server=.;Database=TestDb;Trusted_Connection=True;"
});
});
builder.ConfigureServices(services =>
{
// 创建Mock服务
MockAdminAuthService = Substitute.For();
MockAdminUserService = Substitute.For();
MockAdminOrderService = Substitute.For();
MockAdminMemberService = Substitute.For();
MockAdminProfileAuditService = Substitute.For();
MockAdminReportService = Substitute.For();
MockAdminBannerService = Substitute.For();
MockAdminAccountService = Substitute.For();
MockAdminRoleService = Substitute.For();
MockAdminMenuService = Substitute.For();
MockAdminLogService = Substitute.For();
// 替换服务
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.AddSingleton(MockAdminAuthService);
services.AddSingleton(MockAdminUserService);
services.AddSingleton(MockAdminOrderService);
services.AddSingleton(MockAdminMemberService);
services.AddSingleton(MockAdminProfileAuditService);
services.AddSingleton(MockAdminReportService);
services.AddSingleton(MockAdminBannerService);
services.AddSingleton(MockAdminAccountService);
services.AddSingleton(MockAdminRoleService);
services.AddSingleton(MockAdminMenuService);
services.AddSingleton(MockAdminLogService);
});
}
}