Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

324
Vistas
¿Cómo puedo ejecutar un comando antes de ejecutar pruebas con `dotnet test` y VS?

Tengo un proyecto .NET que depende de una base de datos para la que estoy escribiendo pruebas de integración. Cuando ejecuto las pruebas, necesito que se ejecute un contenedor docker local. Se puede iniciar con el siguiente comando (desde la raíz de la solución):

 docker compose up -d db

Por ahora, esto es lo suficientemente simple como para hacerlo manualmente pero, idealmente, levantar el contenedor se automatizaría cada vez que se ejecuten las pruebas. Con este fin, intenté agregar lo siguiente:

(solution root)/Directory.Build.props :

 <SolutionRoot>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))</SolutionRoot>

(solution root)/tests/IntegrationTests/IntegrationTests.csproj :

 <Target Name="DbContainerUp" BeforeTargets="VSTest"> <Exec Command="cd $(SolutionRoot)" /> <Exec Command="docker compose up -d db" /> </Target>

Esto funciona, pero solo cuando se ejecuta a través dotnet test . Si ejecuto las pruebas con Visual Studio Test Explorer o VSCode Test Runner, no se invoca el destino DbContainerUp . Supongo que esto se debe a que Test Explorer/Runner no invoca dotnet msbuild /t:VSTest (que es a lo que se traduce dotnet test ) pero no puedo encontrar ninguna documentación de qué objetivos (si los hay) VS y VSCode usan.

He investigado lo siguiente y aún no he encontrado un camino viable a seguir:

  1. .runsettings no proporciona un punto de extensibilidad para ejecutar comandos.
  2. La fuente del corredor xunit no contiene un destino personalizado.
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Por ahora, he resuelto esto agregando un AfterTargets="AfterBuild" al objetivo DbContainerUp de la siguiente manera:

 <Target Name="DbContainerUp" BeforeTargets="VSTest" AfterTargets="AfterBuild"> <Exec Command="cd $(SolutionRoot)" /> <Exec Command="docker compose up -d db" /> </Target>

Esto funciona porque VS (y VS Code) deben compilar el proyecto IntegrationTests como parte del descubrimiento de la prueba o antes de la ejecución de la prueba (según la implementación). Además, debido a que BeforeTargets y AfterTargets son cooperativos (cualquiera activará el destino personalizado), esto significa que dotnet test continúa comportándose como se esperaba.

Si bien esta no es una solución perfecta (cualquier compilación genérica de dotnet build también iniciará el contenedor), es aceptable para nuestras necesidades asegurarnos de que se inicie el contenedor.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda