【发布时间】:2021-10-15 14:21:59
【问题描述】:
我正在尝试了解如何在 ASP.NET Core 6 Web API 控制器上进行集成测试。我已尝试关注我能找到的所有 guides、SO 帖子和建议,但由于某种原因,我不断遇到指南中未提及的错误。
EventControllerTests.cs
namespace UnitTests.ProjectToBeTested.Controllers
{
public class EventControllerTests
{
[Fact]
public async Task EventController_Post_RespondsOkIfRequestContainsCorrectFeilds_SuccessAsync()
{
// Arrange
var application = new WebApplicationFactory<Program>();
var client = application.CreateClient();
...
ProjectToBeTested.csproj
...
<ItemGroup>
<InternalsVisibleTo Include="IntegrationTests" />
</ItemGroup>
...
运行测试时会抛出以下内容:
消息: System.InvalidOperationException:没有方法'public static IHostBuilder CreateHostBuilder(string[] args)' 或 'public static IWebHostBuilder CreateWebHostBuilder(string[] args)' 发现于 '程序'。或者,可以扩展 WebApplicationFactory`1 并 'CreateHostBuilder' 或 'CreateWebHostBuilder' 可以被覆盖为 提供您自己的实例。
堆栈跟踪: WebApplicationFactory
1.CreateWebHostBuilder() WebApplicationFactory1.EnsureServer() WebApplicationFactory1.CreateDefaultClient(DelegatingHandler[] handlers) WebApplicationFactory1.CreateDefaultClient(Uri baseAddress, DelegatingHandler[] 处理程序) WebApplicationFactory1.CreateClient(WebApplicationFactoryClientOptions options) WebApplicationFactory1.CreateClient() EventControllerTests.EventController_Post_RespondsOkIfRequestContainsCorrectFeilds_SuccessAsync() 行 17 --- 上一个位置的堆栈跟踪结束 ---
This SO post 显示为一种可能的解决方案,但使用的是使用 Startup 类的 pre-6。 .NET 6 解决方案是什么?
如果我改为遵循"Basic tests with the default WebApplicationFactory"-guide,我什至无法构建解决方案,因为测试类构造函数抛出
错误 CS0051 可访问性不一致:参数类型 'WebApplicationFactory' 比方法更难访问 'EventControllerTests.EventControllerTests(WebApplicationFactory)' 集成测试 C:\...\EventControllerTests.cs
【问题讨论】:
-
你可以像这样使用startup.cs stackoverflow.com/a/63603562/6527049
-
@viveknuna 在 ASP.NET 6 Minimal API 中没有
Startup.cs -
您使用的是哪个 .NET 6 版本? RC1? RC2?确保升级到最新版本。你的
Program.cs是什么样的? -
@PanagiotisKanavos AFAIK 它应该在那里,但最小的 API 只是一种做事方式,没有强制执行,对吧?让我看看文档
-
错了。没有这样的课。该代码现在位于
Program.cs
标签: c# asp.net-core xunit .net-6.0