Per*_*nce 20 .net c# xunit asp.net-core
在开始之前,我已经尝试了以下所有建议,但均无效:
集成测试 ASP.NET Core 与 .NET Framework - 找不到 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.WebApplicationFactory
1.EnsureDepsFile() at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.EnsureServer() 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateDefaultClient(DelegatingHandler[] handlers) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateDefaultClient(Uri baseAddress,DelegatingHandler[] 处理程序) 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateClient(WebApplicationFactoryClientOptions options) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateClient () 位于 /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs 中的 SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1():SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1() 第 14 行在 /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs:第 16 行 Xunit.Sdk.TestInvoker1.<>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) 在 / /src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs 中: / /src/xunit.core/Sdk/ExceptionAggregator.cs 中的 Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) 第 48 行:第 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);
}
Run Code Online (Sandbox Code Playgroud)
根据建议,我已确保Microsoft.AspNetCore.Mvc.Testing -> 6.0.0在我的集成测试项目中直接引用。我还尝试了对建议的文件进行各种调整.csproj,但似乎没有任何效果。
我被困在试图进一步调试这个问题上,有什么想法吗?
Pma*_*Ace 60
您可能在测试文件中为 Program 指定了错误的命名空间(就像我一样)。
我必须在 Program.cs 文件末尾(最后一行)添加以下内容,以使其对需要它的测试项目可见:
public partial class Program { }
Run Code Online (Sandbox Code Playgroud)
可以在此处找到示例:最小 api 测试示例
rTE*_*ECH 17
我也遇到了同样的问题,尽管原因完全不同。
我正在使用 .net 6,但我故意选择使用实际具有文件的实现Program.cs。当我从官方 MS 集成测试指南复制代码时,我让 VS 引入所有依赖项。用于解决的依赖项Program.cs不是我自己的(为了这个答案而使用PersonalSite ),而是 MS 自己的实现之一:
当然,我犯了一个小错误,但也许我可以帮助别人。
对于那些真正需要部分类实现技巧的人,我链接的 MS 集成测试指南列出了做到这一点的指南。
| 归档时间: |
|
| 查看次数: |
10026 次 |
| 最近记录: |