如何使用WebApplicationFactory对.NET 6 Web Api项目进行集成测试?
.NET 6 无Startup类时WebApplicationFactory集成测试解决方案
方案1:适配最小API模型(推荐,无需改项目结构)
.NET 6默认的顶级语句Program.cs默认生成了隐式的Program类,只需将其暴露给测试项目,替换泛型参数即可:
- 第一步:将Program类暴露给测试项目,二选一即可:
- 在Web API项目的
.csproj文件中添加配置,将内部可见性开放给测试项目:
<ItemGroup> <InternalsVisibleTo Include="你的测试项目程序集名称" /> </ItemGroup>- 直接在Web API项目的
Program.cs文件末尾添加一行代码,将Program类声明为公共分部类:
public partial class Program { } - 在Web API项目的
- 第二步:修改测试代码中的泛型参数,将
Startup替换为Program即可:
原有代码:
修改后:private readonly WebApplicationFactory<Startup> factory = new WebApplicationFactory<Startup>();private readonly WebApplicationFactory<Program> factory = new WebApplicationFactory<Program>();
修改完成后所有原有WebApplicationFactory的用法(服务重写、配置覆盖、客户端创建等)完全和之前一致,无需额外调整。
方案2:保留原有Startup类结构(兼容旧代码零修改)
如果不想修改现有测试代码,可以在创建项目时指定参数生成带Startup类的项目:
dotnet new webapi --use-startup true
如果是已经创建好的.NET 6项目,也可以手动恢复.NET 5的项目结构:将Program.cs中服务注册、中间件配置的逻辑迁移到新建的Startup类中,再将Program.cs调整为.NET 5时代的写法即可,原有测试代码可以完全复用。
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

