xiangyixiangqin/server/tests/XiangYi.Api.Tests/AppApi/AppApiWebApplicationFactory.cs
2026-01-02 18:00:49 +08:00

83 lines
3.1 KiB
C#

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;
/// <summary>
/// 小程序API集成测试工厂
/// </summary>
public class AppApiWebApplicationFactory : WebApplicationFactory<IAppApiMarker>
{
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<IAuthService>();
MockProfileService = Substitute.For<IProfileService>();
MockChatService = Substitute.For<IChatService>();
MockInteractService = Substitute.For<IInteractService>();
MockReportService = Substitute.For<IReportService>();
MockMemberService = Substitute.For<IMemberService>();
MockOrderService = Substitute.For<IOrderService>();
// 替换服务
services.RemoveAll<IAuthService>();
services.RemoveAll<IProfileService>();
services.RemoveAll<IChatService>();
services.RemoveAll<IInteractService>();
services.RemoveAll<IReportService>();
services.RemoveAll<IMemberService>();
services.RemoveAll<IOrderService>();
services.AddSingleton(MockAuthService);
services.AddSingleton(MockProfileService);
services.AddSingleton(MockChatService);
services.AddSingleton(MockInteractService);
services.AddSingleton(MockReportService);
services.AddSingleton(MockMemberService);
services.AddSingleton(MockOrderService);
});
}
/// <summary>
/// 配置默认的Mock行为
/// </summary>
public void SetupDefaultMocks()
{
// 配置AuthService默认行为
MockAuthService.LoginAsync(Arg.Any<string>())
.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"));
}
}