Antes de comenzar, probé todas las sugerencias de las siguientes y ninguna funcionó:
Prueba de integración ASP.NET Core con .NET Framework: no se puede encontrar deps.json
https://zimmergren.net/unable-to-find-deps-json-dotnet-azure-devops/
Así que estoy tratando de escribir algunas pruebas de integración para dotnet 6. Sin embargo, mi WebApplicationFactory
arroja el siguiente error:
System.InvalidOperationException: No se puede encontrar '/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/...
System.InvalidOperationException No se puede encontrar '/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/testhost.deps.json'. Este archivo es necesario para que las pruebas funcionales se ejecuten correctamente. Debe haber una copia del archivo en la carpeta bin del proyecto de origen. Si ese no es el caso, asegúrese de que la propiedad PreserveCompilationContext esté establecida en verdadero en su archivo de proyecto. Por ejemplo, 'verdadero'. Para que las pruebas funcionales funcionen, deben ejecutarse desde la carpeta de salida de compilación o el archivo testhost.deps.json del directorio de salida de su aplicación debe copiarse en la carpeta donde se ejecutan las pruebas. Una causa común de este error es tener habilitadas las instantáneas cuando se ejecutan las pruebas. en Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory
1.EnsureDepsFile() at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory
1.EnsureServer() en Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateDefaultClient(DelegatingHandler[] handlers) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory
1.CreateDefaultClient(Uri baseAddress, DelegatingHandler[] handlers) en Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateClient(WebApplicationFactoryClientOptions options) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory
1. CreateClient() en SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1() en /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs:línea 14 en SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1( ) en /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs:line 16 en 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(Func
1 asyncAction) en / /src/xunit.execution/Sdk /Frameworks/ExecutionTimer.cs:line 48 en Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) en / /src/xunit.core/Sdk/ExceptionAggregator.cs:line 90
Mi código de prueba real es extremadamente simple:
[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); }
Según las sugerencias, me aseguré de hacer referencia directa a Microsoft.AspNetCore.Mvc.Testing -> 6.0.0
en mi proyecto de pruebas de integración. También probé los diversos ajustes a los archivos .csproj
que se sugirieron, pero nada parece funcionar.
Estoy atascado en cosas para tratar de depurar esto aún más, ¿alguna idea?
Probablemente esté apuntando al espacio de nombres incorrecto para el Programa en su archivo de prueba (como yo).
Tuve que agregar lo siguiente al final de mi archivo Program.cs (última línea) para hacerlo visible para mis proyectos de prueba que lo necesitan:
public partial class Program { }
Puede encontrar un ejemplo aquí: ejemplo de prueba mínima de API
Tuve el mismo problema, aunque por una razón completamente diferente.
Estoy usando .net 6 pero elegí deliberadamente usar una implementación que en realidad tiene un archivo Program.cs
. Cuando copié el código de la guía oficial de prueba de integración de MS , dejé que VS extrajera todas las dependencias. La dependencia utilizada para resolver Program.cs
no era mía ( PersonalSite por el bien de esta respuesta), sino una de la propia implementación de MS:
Un pequeño error de mi parte, claro, pero tal vez pueda ayudar a alguien.
Para aquellos que realmente necesitan el truco de implementación de clase parcial, la guía de prueba de integración de MS que vinculé enumera las pautas para hacer precisamente eso.