No se puede encontrar testhost.dll. Publique su proyecto de prueba y vuelva a intentarlo

98

Tengo una biblioteca de clases básica dotnet simple con un solo método de prueba XUnit:

TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.console" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runners" Version="2.0.0" />
  </ItemGroup>

</Project>

BasicTest.cs:
using Xunit;

namespace TestLib
{
    public class BasicTest
    {
        [Fact(DisplayName = "Basic unit test")]
        [Trait("Category", "unit")]
        public void TestStringHelper()
        {
            var sut = "sut";
            var verify = "sut";

            Assert.Equal(sut, verify);
        }
    }
}

Si entro el proyecto en la CLI y escribo dotnet buildel proyecto builds. Si escribo dotnet test, obtengo esto:

C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.

Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.

Test Run Aborted.

¿Qué necesito cambiar para que se ejecute la prueba?

Si ayuda, VS Code tampoco muestra las pruebas en su explorador de pruebas.

Matt W
fuente
En mi caso, no se pueden ejecutar pruebas contra netstandard2.0, ya que esa es una definición de API, no un tiempo de ejecución. Si cambia el TFM a net472, todo funcionará bien. Alternativamente, puede realizar múltiples objetivos a netcore + net472, por ejemplo, y ejecutar ambos.
kzu

Respuestas:

25

En mi caso, el problema era que estaba apuntando a .NET Core 2.0 y el cambio a .NET Core 2.1 resolvió el problema. Sin embargo, estaba usando Microsoft.NET.Test.SDK v16.4.0 en lugar de 15.9.0.

Andreas
fuente
150

La instalación del Microsoft.NET.Test.Sdkpaquete desde el administrador de paquetes nuget resolvió mi problema.

R15
fuente
Eso ya estaba incluido en mi publicación, pero tiene razón: habrá grandes problemas al ejecutar pruebas unitarias con dotnet core sin él.
Matt W
2
"Microsoft.NET.Test.Sdk" era la pieza que faltaba cuando agrega un proyecto de biblioteca de clase y lo convierte en un proyecto de prueba. Probablemente lo mejor que se puede hacer sería agregar un nuevo proyecto de prueba y luego agregar los paquetes nuget necesarios como Rhino o Moq, etc.
Yawar Murtaza
2
Creado .NET Standard 2.0 lib, agregado xunit, xunit.runner.visualstudioy Microsoft.NET.Test.Sdkal proyecto, sigue siendo el mismo resultado. Creo que hay otro factor en juego ...
Manfred
12
El problema en mi caso fue causado por la creación de un netstandard2.0proyecto en lugar de un netcoreapp2.2proyecto. Tan pronto como cambié a este último, funcionó. Los únicos paquetes nuget que necesitaba eran xunit, xunit.runner.visualstudioy Microsoft.NET.Test.Sdk.
Manfred
1
La instalación de Microsoft.NET.Test.Sdk tampoco funcionó para mí, HASTA que lo hice dotnet clean
IGx89
24

Había creado una biblioteca de clases e intenté usar el paquete XUnit NuGet en ella.

Lo que debería haber hecho fue crear un proyecto XUnit usando este comando: dotnet new xunit -n TestProject

Encontré esta página útil .

Matt W
fuente
3
Después de ejecutar este comando, es posible que desee actualizar los paquetes nuget a los que hace referencia el nuevo proyecto.
Manfred
O instale nuget xunit.runner.visualstudion en el proyecto existente;)
Lukáš Kmoch
¿Eso es un error tipográfico? No puedo encontrar ese.
Matt W
Si tiene un proyecto existente, puede pasar el nombre de ese con --forcepara obligarlo a reconstruir el proyecto como un proyecto de prueba de xUnit. Según el comentario de @ Manfred, deberá actualizar / volver a agregar cualquier referencia de proyecto que tuviera en ese proyecto.
Myles
1
@MattW Sí, parece un error tipográfico. Creo que @Lukas quiso decir xunit.runner.visualstudioque puede encontrar en nuget.org/packages/xunit.runner.visualstudio
Manfred
12

En mi caso, el problema fue que tengo un proyecto de extensión para xunit. También hay un proyecto de prueba para probar las extensiones. Cuando ejecuté dotnet testmi solución, mi proyecto de extensión también se seleccionó como un proyecto de prueba unitaria (me tomó un tiempo darme cuenta de esto). La razón de esto es que hace referencia a algunos paquetes xunit. Uno de estos paquetes xunit establece automáticamente la <IsTestProject>true</IsTestProject>propiedad en su archivo csprj. Esto es realmente algo bueno ya que el 99,99% de los proyectos que hacen referencia a xunit son en realidad pruebas unitarias. Finalmente pude resolver esto estableciendo explícitamente

     <PropertyGroup>
...
        <IsTestProject>false</IsTestProject>
...
      </PropertyGroup>

Manualmente en mi archivo csproj. Entonces el problema desapareció.

Willy Van den Driessche
fuente
11

Esto me sucedió después de actualizar Microsoft.NET.Test.Sdk de v16.2.0 a v16.4.0 con <TargetFramework>netcoreapp2.0</TargetFramework>. Actualizar para <TargetFramework>netcoreapp3.0</TargetFramework>resolver el problema por mí.

SteveHansen
fuente
9

Se solucionó instalando xunit.runner.visualstudio.

Eugene Ihnatsyeu
fuente
8

Me he encontrado con esto un par de veces y siempre olvido lo que pasa. Más recientemente tuve:

  • Biblioteca de clases -> Orientación a .NET Core 3.0
  • Proyecto de prueba -> Dirigido a .NET Core 3.1

Paquetes para mi proyecto de prueba:

  • Moq -> 4.14.1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

Yo estaba viendo:

No se puede encontrar C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll. Publique su proyecto de prueba y vuelva a intentarlo.

Y todo lo que necesitaba hacer era agregar a mi proyecto de prueba el paquete nuget que faltaba: "Microsoft.NET.Test.SDK"

Todo volvió a la normalidad en este punto.

Líder de desarrollo
fuente
7

Si está utilizando xUnit, asegúrese de que su tipo de proyecto no sea tan netstanderd. Como xUnit no es compatible con netstanderd , cámbielo a coreapp2.0 u otros.

Raj Kumar
fuente
Este era mi problema en particular. Doh! Debería haberlo captado antes. Gracias por su respuesta, ya que me puso en el camino correcto :)
Dev Leader
Cambiar el proyecto de prueba para que sea una aplicación .Net Core permitió que el paquete xunit.runner.visualstudio se instalara correctamente. Tenga en cuenta que probablemente tendrá que cerrar su solución y volver a cargarla para que VisualStudio solucione los cambios.
Sheldon
6

Encontré un problema de compatibilidad muy interesante con una versión. Actualicé mi código como una práctica normal y cambié a xUnit.runner.visualstudio 2.4.2. Dejó de funcionar para .Net Core 3.1. Tuve que degradar a 2.4.1 y comenzó a funcionar nuevamente.

Maximiliano Ríos
fuente
1
Tuve el mismo problema, para algunos de los proyectos de prueba en mi solución. El factor común para los proyectos de prueba que fallaron después de la actualización a 2.4.2 fue que a esos proyectos les faltaba Microsoft.Net.Test.Sdk (nunca antes había sido un problema). Se agregó el nuget 16.6.1 y volvió a funcionar.
bit0001
Bien, no lo sabía. Bajé de calificación para que funcione
Maximiliano Rios
1
Lo he arreglado de la misma manera. La degradación del paquete xUnit.runner.visualstudio a 2.4.1 solucionó el problema.
Jacek Labuda
Puedo confirmar que sigue siendo un problema con la versión 2.4.3 de xunit.runner.visualstudio. Bajar a 2.4.1 resuelve el problema.
bN_
Tuve que degradar muchos proyectos debido a esto. Accidentalmente actualicé todo y dejó de funcionar
Maximiliano Rios
5

Estaba construyendo un proyecto de prueba netcoreapp2.2 y luego tratando de ejecutarlo dotnet vstestdesde la carpeta bin. Noté que las DLL de prueba de Microsoft de:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />

no se estaban enviando a mi carpeta bin. En lugar de simplemente compilar, ejecuté una publicación que incluía las DLL necesarias en la carpeta de salida y luego pude ejecutar dotnet vstestdesde allí.

Michael Armitage
fuente
3

Si está apuntando a netstandard2.0, esto no funcionará. Si está utilizando .NET Core. asegúrese de que el .csproj contenga las siguientes líneas:

<TargetFramework>netcoreapp3.0</TargetFramework>

y tambien contiene el paquete Microsoft.NET.Test.Sdk

HarryKak
fuente
2

mismo problema que enfrenté para el proyecto Nunit (.net core 3.1). Estaba usando Microsoft.NET.Test.SDK v16.6.1, bajé la versión a 15.9.0. Y empieza a funcionar

SaifAli Sanadi
fuente
1

Se encontró con este error, la causa principal fue que las pruebas alcanzaron la longitud máxima para una ruta de Windows (MAX_PATH), que se define como 260 caracteres.

S1r-Lanzelot
fuente
0

Si está ejecutando un proyecto mediante la clonación, la solución es instalar Microsoft.NET.Test.Sdk. Cómo: Herramientas> Administrador de paquetes Nuget> Administrar paquetes Nuget para la solución ...> Busque Microsoft.NET.Test.Sdk e instálelo para su proyecto de prueba.

Shawon Barua
fuente
0

Esto también podría deberse al intento inadvertido de ejecutar un proyecto que no es de prueba; esto suele ocurrir cuando el filtro de archivos de prueba es demasiado amplio.

reim
fuente
0

Recibí este error al intentar depurar una prueba unitaria. A continuación se muestran los pasos que probé.

  • Paso 1: instaló Microsof.TestPlatform.TestHost e intentó ejecutar la prueba, pero no tuvo suerte.
  • Paso 2: se cambió el marco de destino de .NET Core 2.0 a 2.1 e intentó ejecutar la prueba, pero no hubo suerte.
  • Paso 3: Cerró y abrió VS2017 e intentó ejecutarlo.

¡¡¡Hurra!!! funcionó :-) Nunca te pierdas de probar el último paso ;-) Espero que esto ayude a alguien como yo.

Venu
fuente