ASP.NETCoreWebAPI使用WebApplicationFactory进行模拟
创始人
2024-09-18 09:30:39
0
  1. 创建一个ASP.NET Core Web API项目。使用以下代码将WebApplicationFactory注入ServiceCollection:
services.AddControllers();

services.AddDbContext(options =>
    options.UseInMemoryDatabase(databaseName: "TestDb"));

services.AddScoped();

services.AddAutoMapper(typeof(MyProfile).Assembly);

services.AddMvc()
    .AddApplicationPart(typeof(Startup).Assembly)
    .AddControllersAsServices();
    
services.AddHttpContextAccessor();

services.AddAuthentication("Test")
    .AddScheme("Test", options => { });

services.AddAuthorization(options =>
{
    options.AddPolicy("Policy",
        policy => policy.Requirements.Add(new TestRequirement()));
});
  1. 创建MockWebApplicationFactory,继承WebApplicationFactory,并重写ConfigureWebHost方法,为测试提供一个数据库:
public class MockWebApplicationFactory : WebApplicationFactory
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            var descriptor = services.SingleOrDefault(
                d => d.ServiceType ==
                    typeof(DbContextOptions));

            if (descriptor != null)
            {
                services.Remove(descriptor);
            }

            services.AddDbContext(options =>
            {
                options.UseInMemoryDatabase("TestDb");
            });

            services.AddScoped();
        });
    }
}
  1. 创建MockMyService,一个伪造的服务类,实现IMyService接口,以便在某些情况下更好地控制端点的行为:
public class MockMyService : IMyService
{
    public string GetMyString()
    {
        return "Mock string";
    }
}
  1. 编写测试用例:
public class MyControllerTests : IClassFixture
{
    private readonly MockWebApplicationFactory _factory;

    public MyControllerTests(MockWebApplicationFactory factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task GetMyString_ReturnsCorrectString()
    {
        var client = _factory.CreateClient();

        var response = await client.GetAsync("/api

相关内容

热门资讯

八分钟辅助“收集微乐小程序游戏... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
一分钟辅助“新西游脚本辅助”开... 一分钟辅助“新西游脚本辅助”开挂(插件)辅助插件辅助教程-有挂透明挂您好:新西游脚本辅助这款游戏可以...
透视辅助“蜀山四川免费辅助软件... 蜀山四川免费辅助软件是一款专注玩家量身打造的游戏记牌类型软件,在蜀山四川免费辅助软件这款游戏中我们可...
六分钟辅助“微友约局辅助”开挂... 六分钟辅助“微友约局辅助”开挂(脚本)辅助脚本细节揭秘-有挂秘笈;无需打开直接搜索加薇1367043...
三分钟辅助“潮友潮汕木虱开挂辅... 潮友潮汕木虱开挂辅助器下载是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户...
三分钟辅助“聚友联盟”开挂(透... 三分钟辅助“聚友联盟”开挂(透视)辅助透视教你教程-真实有挂 了解更多开挂安装加(136704302...
六分钟辅助“wpk辅助软件”开... 六分钟辅助“wpk辅助软件”开挂(脚本)辅助脚本力荐教程-讲解有挂>>您好:软件加136704302...
透视辅助“微信卡农辅助”开挂(... 透视辅助“微信卡农辅助”开挂(下载)辅助下载软件教程-有挂教程>>您好:软件加136704302中薇...
五分钟辅助“桂林字牌辅助科技助... 桂林字牌辅助科技助手开挂教程视频分享装挂详细步骤在当今的网络游戏中,桂林字牌辅助科技助手作为一种经典...
两分钟辅助“hhpoker辅助... 两分钟辅助“hhpoker辅助实战视频”开挂(软件)辅助软件德州教程-真是有挂 了解更多开挂安装加(...