83 lines
3.1 KiB
C#
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"));
|
|
}
|
|
}
|