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")); } }