5

在开始之前,我已经尝试了以下所有建议,但都没有奏效:

使用 .NET Framework 集成测试 ASP.NET Core - 找不到 deps.json

https://zimmergren.net/unable-to-find-deps-json-dotnet-azure-devops/


所以我正在尝试为 dotnet 6 编写一些集成测试。但是,我WebApplicationFactory抛出了以下错误:

System.InvalidOperationException:找不到'/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/...

System.InvalidOperationException 找不到“/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/testhost.deps.json”。此文件是功能测试正常运行所必需的。您的源项目 bin 文件夹中应该有该文件的副本。如果不是这种情况,请确保在项目文件中将属性 PreserveCompilationContext 设置为 true。例如“真实”。要使功能测试正常工作,它们需要从构建输出文件夹运行,或者必须将应用程序输出目录中的 testhost.deps.json 文件复制到运行测试的文件夹中。此错误的一个常见原因是在测试运行时启用了卷影复制。在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.EnsureDepsFile() at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.EnsureServer() 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory 1.CreateDefaultClient(DelegatingHandler[] handlers) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateDefaultClient(Uri baseAddress, DelegatingHandler[] handlers) 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory 1.CreateClient(WebApplicationFactoryClientOptions options) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateClient() 在 SubscriptionInfoApi.Tests.Integration.UnitTest1 /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs 中的 .Test1():/repos/subscription-info-api/ 中 SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1() 的第 14 行tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs:Xunit.Sdk.TestInvoker 1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 264 --- End of stack trace from previous location --- at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func1 asyncAction 的第 16 行)在 / /src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs:Xunit.Sdk.ExceptionAggregator.RunAsync 的第 48 行(Func`1 代码) 在//src/xunit.core/Sdk/ExceptionAggregator.cs:line 90

我的实际测试代码非常简单:

   [Fact]
    public async Task Test1()
    {
        await using var app    = new WebApplicationFactory<Program>();
        using var client = app.CreateClient();
        var       res    = await (await client.GetAsync("/alive-test")).Content.ReadAsStringAsync();
        Assert.Equal("Alive!", res);
    }

根据建议,我确保Microsoft.AspNetCore.Mvc.Testing -> 6.0.0在我的集成测试项目中直接引用。我还尝试了对.csproj建议的文件的各种调整,但似乎没有任何效果。

我被困在试图进一步调试的事情上,有什么想法吗?

4

2 回答 2

8

您可能在测试文件中为 Program 定位了错误的名称空间(就像我一样)。

我必须在 Program.cs 文件(最后一行)的末尾添加以下内容,以使其对需要它的测试项目可见:

public partial class Program { }

可以在这里找到一个示例:最小的 api 测试示例

于 2021-11-18T21:03:09.330 回答
0

我遇到了同样的问题,尽管原因完全不同。

我正在使用 .net 6,但我故意选择使用实际具有Program.cs文件的实现。当我从官方的 MS 集成测试指南中复制代码时,我让 VS 引入了所有依赖项。用于解决的依赖Program.cs不是我自己的(为了这个答案,PersonalSite ),而是 MS 自己的实现之一:

在此处输入图像描述

当然,我的一个小错误,但也许我可以帮助别人。

对于那些真正需要部分类实现噱头的人,我链接的 MS integ 测试指南列出了做到这一点的指南。

于 2022-02-17T21:19:27.597 回答