using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using NSubstitute;
using XiangYi.AppApi;
using XiangYi.Application.DTOs.Responses;
using XiangYi.Application.Interfaces;
namespace XiangYi.Api.Tests.AppApi;
///
/// 小程序API集成测试工厂
///
public class AppApiWebApplicationFactory : WebApplicationFactory
{
public IAuthService MockAuthService { get; private set; } = null!;
public IProfileService MockProfileService { get; private set; } = null!;
public IChatService MockChatService { get; private set; } = null!;
public IInteractService MockInteractService { get; private set; } = null!;
public IReportService MockReportService { get; private set; } = null!;
public IMemberService MockMemberService { get; private set; } = null!;
public IOrderService MockOrderService { get; private set; } = null!;
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseEnvironment("Testing");
builder.ConfigureServices(services =>
{
// 创建Mock服务
MockAuthService = Substitute.For();
MockProfileService = Substitute.For();
MockChatService = Substitute.For();
MockInteractService = Substitute.For();
MockReportService = Substitute.For();
MockMemberService = Substitute.For();
MockOrderService = Substitute.For();
// 替换服务
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.RemoveAll();
services.AddSingleton(MockAuthService);
services.AddSingleton(MockProfileService);
services.AddSingleton(MockChatService);
services.AddSingleton(MockInteractService);
services.AddSingleton(MockReportService);
services.AddSingleton(MockMemberService);
services.AddSingleton(MockOrderService);
});
}
///
/// 配置默认的Mock行为
///
public void SetupDefaultMocks()
{
// 配置AuthService默认行为
MockAuthService.LoginAsync(Arg.Any())
.Returns(Task.FromResult(new LoginResponse
{
Token = "test-token",
UserId = 1,
Nickname = "测试用户",
XiangQinNo = "123456",
IsProfileCompleted = false,
IsMember = false,
MemberLevel = 0,
IsRealName = false,
IsNewUser = true
}));
MockAuthService.GenerateXiangQinNoAsync()
.Returns(Task.FromResult("123456"));
}
}