You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Razor项目使用Playwright内存测试服务器遇配置方法缺失错误求助

解决.NET 6顶级语句Program.cs下Playwright内存测试服务器启动错误

我需要启动内存中的Playwright,针对内存测试服务器运行端到端测试。我将一个.NET Core 3.1 MVC项目升级到.NET 6,并添加了使用顶级语句的Razor项目。运行测试用例When_ClickEmployeeMenuOption_Then_EmployeesPageDisplayed_Chrome时,出现错误:

System.InvalidOperationException: 'A public method named 'ConfigureAutomatedTesting' or 'Configure' could not be found in the 'Program' type.'

原因

.NET 6的顶级语句会生成隐式的内部Program类,测试框架(如WebApplicationFactory)无法找到所需的Configure或ConfigureAutomatedTesting公共方法,导致报错。

解决方法

方法1:显式声明Program类并暴露配置方法

将Web项目的顶级语句Program.cs改为显式类结构,暴露公共的配置方法:

namespace YourWebProjectNamespace;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        
        // 保留原有的服务配置代码
        builder.Services.AddRazorPages();
        // ...其他服务配置

        var app = builder.Build();

        // 调用公共Configure方法复用中间件配置
        Configure(app);

        app.Run();
    }

    // 暴露公共Configure方法供测试框架调用
    public static void Configure(IApplicationBuilder app)
    {
        // 保留原有的中间件配置逻辑
        if (!app.Environment.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();
        app.MapRazorPages();
    }
}

方法2:允许测试项目访问内部Program类

如果不想修改Web项目的Program.cs结构,可以在Web项目的.csproj文件中添加配置,让测试项目能访问隐式生成的内部Program类:

<ItemGroup>
  <InternalsVisibleTo Include="YourTestProjectName" />
</ItemGroup>

然后在测试类中直接使用WebApplicationFactory<Program>,并按需配置测试服务器:

public class EmployeePageTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly WebApplicationFactory<Program> _webAppFactory;

    public EmployeePageTests(WebApplicationFactory<Program> webAppFactory)
    {
        _webAppFactory = webAppFactory.WithWebHostBuilder(builder =>
        {
            // 这里可以添加测试环境的定制配置,比如替换服务、修改环境变量等
            builder.UseEnvironment("Testing");
        });
    }

    [Fact]
    public async Task When_ClickEmployeeMenuOption_Then_EmployeesPageDisplayed_Chrome()
    {
        // 启动Playwright并连接到测试服务器
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        // 访问测试服务器的基地址
        await page.GotoAsync(_webAppFactory.Server.BaseAddress);

        // 执行点击员工菜单等测试逻辑
        await page.ClickAsync("#employee-menu");
        await page.WaitForUrlAsync("**/employees");
        
        // 验证页面是否正确加载
        Assert.True(await page.IsVisibleAsync("h1:text('Employees')"));
    }
}

内容的提问来源于stack exchange,提问作者ca53rlb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:10:32