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

ASP.NET Core 6 Web API集成测试抛出System.InvalidOperationException如何解决?

ASP.NET Core 6 Web API 集成测试双报错解决方案

问题1:运行测试提示找不到Program类的CreateHostBuilder/CreateWebHostBuilder方法

报错原文

消息: System.InvalidOperationException : No method 'public static IHostBuilder CreateHostBuilder(string[] args)' or 'public static IWebHostBuilder CreateWebHostBuilder(string[] args)' found on 'Program'. Alternatively, WebApplicationFactory`1 can be extended and 'CreateHostBuilder' or 'CreateWebHostBuilder' can be overridden to provide your own instance.

原因

.NET 6 引入了顶级语句语法,默认生成的Program类是隐式的internal类,且没有显式声明CreateHostBuilder方法,旧版WebApplicationFactory的默认逻辑找不到对应的入口。

修复方案

  1. 打开被测项目的Program.cs文件,在文件的最后一行添加如下代码,显式声明Program部分类:
public partial class Program { }
  1. 确认被测项目csproj中的InternalsVisibleTo配置的程序集名称和你的测试项目的实际程序集名称完全一致:你当前测试代码命名空间前缀为UnitTests,但配置的是IntegrationTests,如果测试项目实际程序集名为UnitTests,要修正配置为:
<ItemGroup>
    <InternalsVisibleTo Include="UnitTests" />
</ItemGroup>

问题2:参照官方指南写注入代码提示可访问性不一致(错误CS0051)

报错原文

错误 CS0051 可访问性不一致: 参数类型“WebApplicationFactory”的可访问性低于方法“EventControllerTests.EventControllerTests(WebApplicationFactory)”

原因

两个可能:要么是InternalsVisibleTo配置错误,测试项目无法访问被测项目的internal Program类;要么是测试项目没有安装Microsoft.AspNetCore.Mvc.Testing包,或者包版本和被测项目的.NET 6版本不匹配。

修复方案

  1. 先完成问题1的两个修复步骤
  2. 确认测试项目已安装和.NET 6版本匹配的Microsoft.AspNetCore.Mvc.Testing NuGet包
  3. 测试类写法参考如下即可正常编译运行:
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;

namespace UnitTests.ProjectToBeTested.Controllers
{
    // 继承IClassFixture开启依赖注入
    public class EventControllerTests : IClassFixture<WebApplicationFactory<Program>>
    {
        private readonly HttpClient _testClient;

        // 注入WebApplicationFactory实例
        public EventControllerTests(WebApplicationFactory<Program> factory)
        {
            _testClient = factory.CreateClient();
        }

        [Fact]
        public async Task EventController_Post_RespondsOkIfRequestContainsCorrectFields_SuccessAsync()
        {
            // Arrange

            // Act

            // Assert
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:09:01