我想了解如何在ASP.NET Core 6 Web API控制器上进行集成测试。我尝试了所有guides,所以我可以找到帖子和推荐,但由于某种原因,我总是遇到指南中没有提到的错误。
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>
...
这会在运行测试时引发以下问题:
消息: 系统.InvalidOperationException:无方法的公共静态 IHostBuilder CreateHostBuilder(字符串[]args)‘或’公共静态 在上找到IWebHostBuilder CreateWebHostBuilder(字符串[]args)‘ "程序"。或者,可以扩展WebApplicationFactory`1并 "CreateHostBuilder"或"CreateWebHostBuilder"可以重写为 提供您自己的实例。 堆栈跟踪: WebApplicationFactory1.CreateWebHostBuilder() WebApplicationFactory
1.EnsureServer()
WebApplicationFactory1.CreateDefaultClient(DelegatingHandler[] handlers) WebApplicationFactory
1.CreateDefaultClient(Uri基本地址,
DelegatingHandler[]处理程序)
WebApplicationFactory1.CreateClient(WebApplicationFactoryClientOptions options) WebApplicationFactory
1.CreateClient()
EventControllerTests.EventController_Post_RespondsOkIfRequestContainsCorrectFeilds_SuccessAsync() line 17
-来自前一位置的堆栈跟踪结束-
This SO post显示为可能的解决方案,但正在使用使用Startup类的Pre-6。.NET 6解决方案是什么?
如果我改用"Basic tests with the default WebApplicationFactory"-guide,我甚至无法生成解决方案,因为测试类构造函数引发了
错误CS0051辅助功能不一致:参数类型 "WebApplicationFactory"比方法更难访问 ‘EventControllerTests.EventControllerTests(WebApplicationFactory)’集成测试 C:...EventControllerTests.cs解决方案:
这是由于测试项目的Microsoft.AspNetCore.Mvc.Testing包使用了错误的版本(它使用的是版本5.*)。请确保您使用的是适合.NET 6的版本。到目前为止,有一个6.0.0-rc.2.21480.10版本可以为我工作。