相关疑难解决方法(0)

如何在.net6中使用WebApplicationFactory(没有可讲的入口点)

在 ASP.NET Core 6 中,默认模板将所有内容从Startup.cs移至Program.cs,并使用 Program.cs 中的顶级语句,因此不再有(可说的)Program类 ether。

这看起来很棒,但现在,我需要测试这一切。WebApplicationFactory<T>仍然期望我通过入门级,但我不能这样做(因为它的名字现在难以形容)。

预计如何在 ASP.NET Core 6 中配置集成测试?

integration-testing asp.net-web-api asp.net-core .net-6.0

45
推荐指数
2
解决办法
4万
查看次数

集成测试和托管 ASP.NET Core 6.0,无需启动类

要在以前版本的 .NET Core 中设置单元测试,我可以通过以下方式在测试项目中托管我的 Web 应用程序或 Web API:

IHost host = Host.CreateDefaultBuilder()
    .ConfigureWebHostDefaults(config =>
    {
        config.UseStartup<MyWebApp.Startup>();
        config.UseUrls("https://localhost:44331/");
        ...    
    })
    .Build();
Run Code Online (Sandbox Code Playgroud)

当前.NET 6.0不使用Startup类概念,因此无法引用。如何以正确、干净的方式在测试项目中托管 ASP.NET Core 应用程序?

c# unit-testing asp.net-core .net-6.0

20
推荐指数
1
解决办法
2万
查看次数

ASP.NET Core 6 Web API 的集成测试抛出 System.InvalidOperationException

我试图了解如何在 ASP.NET Core 6 Web API 控制器上进行集成测试。我尝试遵循我能找到的所有指南、帖子和建议,但由于某种原因,我不断遇到指南中未提及的错误。

\n

事件控制器测试.cs

\n
namespace UnitTests.ProjectToBeTested.Controllers\n{\n    public class EventControllerTests\n    {\n        [Fact]\n        public async Task EventController_Post_RespondsOkIfRequestContainsCorrectFeilds_SuccessAsync()\n        {\n\n            // Arrange\n            var application = new WebApplicationFactory<Program>();\n\n            var client = application.CreateClient();\n            ...\n
Run Code Online (Sandbox Code Playgroud)\n

待测试项目.csproj

\n
...\n    <ItemGroup>\n        <InternalsVisibleTo Include="IntegrationTests" />\n    </ItemGroup>\n...\n
Run Code Online (Sandbox Code Playgroud)\n

运行测试时会抛出以下错误:

\n
\n

消息:\xe2\x80\x89 System.InvalidOperationException:在\n\ 上找不到方法“public static\nIHostBuilder CreateHostBuilder(string[] args)\”或“public static\nIWebHostBuilder CreateWebHostBuilder(string[] args)\” '程序\'。或者,可以扩展 WebApplicationFactory`1,并可以重写\n\n\'CreateHostBuilder\' 或 \'CreateWebHostBuilder\' 以提供你自己的实例。

\n

堆栈跟踪:\xe2\x80\x89 WebApplicationFactory 1.CreateWebHostBuilder() WebApplicationFactory1.EnsureServer()\nWebApplicationFactory 1.CreateDefaultClient(DelegatingHandler[] handlers) WebApplicationFactory1.CreateDefaultClient(Uri baseAddress,\nDelegatingHandler[] 处理程序)\nWebApplicationFactory 1.CreateClient(WebApplicationFactoryClientOptions options) WebApplicationFactory1.CreateClient()\nEventControllerTests.EventController_Post_RespondsOkIfRequestContainsCorrectFeilds_SuccessAsync()\xe2\x80\x89线\ xe2\x80\x8917\n--- …

c# xunit asp.net-core .net-6.0

7
推荐指数
1
解决办法
6728
查看次数

如何使用WebApplicationFactory对.NET 6 Web Api项目进行集成测试?

我一直在使用 WebApplicationFactory 在 .NET 5、.NET Core 3.1 和 .NET Core 2.1 中进行集成测试。这对我来说一切正常。

我只是用以下命令创建我的项目:

dotnet new webapi
Run Code Online (Sandbox Code Playgroud)

然后我看到一个带有 Startup 类的Web api 项目。

然后我创建工厂类的一个实例:

private readonly WebApplicationFactory<Startup> factory = new WebApplicationFactory<Startup>();
Run Code Online (Sandbox Code Playgroud)

正如这里这里所解释的。

WebApplicationFactory 类是我非常喜欢的。它使编写集成测试变得容易。我很喜欢。Microsoft 文档还针对 .NET 6 引用了它

但是,在使用 .NET 6 时,如何确保我的代码可以编译?

提到的命令行语句:

dotnet new webapi
Run Code Online (Sandbox Code Playgroud)

结果是一个运行良好的项目,但是(安装了 .NET 6 SDK 时)没有 Startup 类……现在我的测试无法编译,原因只有一个:Startup 类不存在。

如何解决这个问题?我发现很难想象我不能再编写集成测试,因为WebApplicationFactory<Startup>不再编译。但现在,这就是我需要面对的现实。我该如何解决这个问题?我期待能够使用该类WebApplicationFactory并继续编写集成测试。但如何呢?

integration-testing aspnetcore-environment .net-6.0

4
推荐指数
1
解决办法
6985
查看次数