unit-testing - .NET Core TestServer 在使用单元测试项目中定义的 Startup 类时返回 404
问题描述
我有一个基本的 .net core api web 应用程序和一个使用 TestServer 发出 http 请求的单元测试项目。
我有一个 TestStartup 类,它继承了 api 项目中的 Startup 类。
如果 Startup 类在单元测试项目中,我会收到 404 响应。如果将 TestStartup 类移至 api 项目,我会收到 200 个响应。
Api 项目
api.csproj
<PackageReference Include="Microsoft.AspNetCore.App" />
程序.cs
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
启动.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
}
}
测试控制器.cs
public class TestController : ControllerBase
{
[HttpGet("test")]
public ObjectResult Get()
{
return Ok("data");
}
}
单元测试项目
测试.csproj
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="NUnit" Version="3.10.1" />
<PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
测试.cs
[TestFixture]
public class Tests
{
[Test]
public async Task Test()
{
var server = new TestServer(WebHost.CreateDefaultBuilder()
.UseStartup<TestStartup>()
.UseEnvironment("Development"));
var response = await server.CreateClient().GetAsync("test");
}
}
启动.cs
public class TestStartup : Startup
{ }
解决方案
如果有人遇到这种针对 ASP.NET Core 3.0或3.1的问题,请不要忘记将测试项目 SDK 更改为Microsoft.NET.Sdk.Web
,即
<Project Sdk="Microsoft.NET.Sdk.Web">
根据测试应用程序先决条件。
推荐阅读
- php - 如何从谷歌登录获取 php 会话数据
- performance - 递归 - 干净的代码与性能
- python-3.x - 适用于 Windows 10 的 jupyter notebook 上的 octave 4.4.0 死机
- c# - SendKeys 不适用于 VisualBoy Advance
- sql - How to transpose multiple rows into multiple columns?
- sql - SQL Server:如何包含可为空的分组值
- c# - 使用 Naudio AudioFileReader 读取 WMA 文件时 Unity 崩溃
- docker - 重新创建 docker bind-mount
- javascript - 如何在 vuejs2 中将道具从子级重置为父级
- php - Laravel:按日期范围搜索