Tidak dapat menemukan testhost.dll. Harap publikasikan proyek uji Anda dan coba lagi

99

Saya memiliki perpustakaan kelas inti dotnet sederhana dengan metode pengujian XUnit tunggal:

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);
        }
    }
}

Jika saya memasukkan proyek di CLI dan mengetik dotnet buildproyek membangun. Jika saya mengetik, dotnet testsaya mendapatkan ini:

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.

Apa yang perlu saya ubah untuk menjalankan pengujian?

Jika membantu, VS Code juga tidak menampilkan pengujian di penjelajah pengujiannya.

Matt W.
sumber
Dalam kasus saya, Anda tidak dapat benar-benar menjalankan pengujian terhadap netstandard2.0, karena itu adalah definisi API, bukan runtime. Jika Anda mengalihkan TFM ke net472, semuanya berfungsi dengan baik. Sebagai alternatif, Anda dapat menargetkan multi ke netcore + net472 misalnya dan menjalankan keduanya.
kzu

Jawaban:

25

Dalam kasus saya, masalahnya adalah saya menargetkan .NET Core 2.0 dan beralih ke .NET Core 2.1 memecahkan masalah. Namun saya menggunakan Microsoft.NET.Test.SDK v16.4.0, bukan 15.9.0.

Andreas
sumber
153

Menginstal Microsoft.NET.Test.Sdkpaket dari pengelola paket nuget memecahkan masalah saya.

R15
sumber
Itu sudah termasuk dalam posting saya - tetapi Anda benar: akan ada masalah besar dalam menjalankan pengujian unit dengan inti dotnet tanpa itu.
Matt W
2
"Microsoft.NET.Test.Sdk" adalah bagian yang hilang saat Anda menambahkan proyek perpustakaan kelas dan mengubahnya menjadi proyek uji. Mungkin hal terbaik untuk dilakukan adalah menambahkan proyek tes baru kemudian menambahkan paket nuget yang dibutuhkan seperti Rhino atau Moq dll ...
Yawar Murtaza
2
Dibuat lib .NET Standard 2.0, ditambahkan xunit, xunit.runner.visualstudiodan Microsoft.NET.Test.Sdkke proyek, masih hasil yang sama. Saya pikir ada faktor lain yang berperan ...
Manfred
12
Masalah dalam kasus saya disebabkan oleh membuat netstandard2.0proyek, bukan netcoreapp2.2proyek. Segera setelah saya beralih ke yang terakhir, itu berhasil. Satu-satunya paket nuget yang saya butuhkan adalah xunit, xunit.runner.visualstudiodan Microsoft.NET.Test.Sdk.
Manfred
1
Menginstal Microsoft.NET.Test.Sdk juga tidak berhasil untuk saya, HINGGA saya melakukannya dotnet clean
IGx89
24

Saya telah membuat perpustakaan kelas dan mencoba menggunakan paket XUnit NuGet di dalamnya.

Apa yang seharusnya saya lakukan adalah membuat proyek XUnit menggunakan perintah ini: dotnet new xunit -n TestProject

Saya menemukan halaman yang bermanfaat ini .

Matt W.
sumber
3
Setelah menjalankan perintah ini, Anda mungkin ingin memperbarui paket nuget referensi proyek baru.
Manfred
Atau instal nuget xunit.runner.visualstudion ke proyek yang ada;)
Lukáš Kmoch
Apakah itu salah ketik? Saya tidak dapat menemukan yang itu.
Matt W
Jika Anda memiliki proyek yang sudah ada, Anda dapat meneruskan nama itu dengan --forceuntuk memaksanya membangun kembali proyek sebagai proyek uji xUnit. Sesuai komentar @ Manfred, Anda harus memperbarui / menambahkan kembali referensi proyek apa pun yang Anda miliki dalam proyek itu.
Myles
1
@MattW Ya, sepertinya salah ketik. Saya pikir @Lukas berarti xunit.runner.visualstudioyang dapat Anda temukan di nuget.org/packages/xunit.runner.visualstudio
Manfred
12

Dalam kasus saya, masalahnya adalah saya memiliki proyek ekstensi untuk xunit. Ada juga proyek uji untuk menguji ekstensi. Ketika saya menjalankan dotnet testsolusi saya, proyek ekstensi saya juga diambil sebagai proyek uji unit (saya butuh waktu untuk menyadari hal ini). Alasannya adalah karena ia mereferensikan beberapa paket xunit. Salah satu paket xunit ini secara otomatis menyetel <IsTestProject>true</IsTestProject>properti di file csprj Anda. Ini sebenarnya bagus karena 99,99% project yang mereferensikan xunit sebenarnya adalah unit test. Saya akhirnya bisa menyelesaikan ini dengan mengatur secara eksplisit

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

Secara manual di file csproj saya. Kemudian masalahnya hilang.

Willy Van den Driessche
sumber
11

Ini terjadi pada saya setelah memperbarui Microsoft.NET.Test.Sdk dari v16.2.0 ke v16.4.0 dengan <TargetFramework>netcoreapp2.0</TargetFramework>. Memperbarui untuk <TargetFramework>netcoreapp3.0</TargetFramework>menyelesaikan masalah saya.

SteveHansen
sumber
9

Perbaiki dengan menginstal xunit.runner.visualstudio.

Eugene Ihnatsyeu
sumber
8

Jika Anda menggunakan xUnit, pastikan jenis proyek Anda bukan sebagai netstanderd. Karena xUnit tidak mendukung netstanderd , ubah ke coreapp2.0 atau lainnya.

Raj kumar
sumber
Ini adalah masalah saya secara khusus. Doh! Aku seharusnya menangkapnya lebih cepat. Terima kasih atas tanggapan Anda karena telah menempatkan saya di jalur yang benar :)
Dev Leader
Mengubah proyek pengujian menjadi aplikasi .Net Core memungkinkan paket xunit.runner.visualstudio diinstal dengan benar. Harap dicatat bahwa Anda mungkin perlu menutup solusi Anda dan memuatnya kembali agar VisualStudio dapat menyelesaikan perubahan.
Sheldon
8

Saya telah mengalami ini beberapa kali dan saya selalu lupa apa yang terjadi. Baru-baru ini saya memiliki:

  • Perpustakaan Kelas -> Penargetan .NET Core 3.0
  • Uji Proyek -> Penargetan .NET Core 3.1

Paket untuk proyek uji saya:

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

Saya melihat:

Tidak dapat menemukan C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll. Harap publikasikan proyek uji Anda dan coba lagi.

Dan semua yang perlu saya lakukan adalah menambahkan paket nuget yang hilang ke proyek pengujian saya: "Microsoft.NET.Test.SDK"

Semuanya kembali normal pada saat ini.

Pemimpin Pengembang
sumber
6

Saya menemukan masalah kompatibilitas yang sangat menarik dengan suatu versi. Saya melakukan upgrade seperti praktik biasa, kode saya, dan saya beralih ke xUnit.runner.visualstudio 2.4.2. Itu berhenti bekerja untuk .Net Core 3.1. Saya harus menurunkan versi ke 2.4.1 dan itu mulai berfungsi kembali.

Maximiliano Rios
sumber
1
Saya memiliki masalah yang sama - untuk beberapa proyek pengujian dalam solusi saya. Faktor umum untuk proyek uji yang gagal setelah pembaruan ke 2.4.2 adalah bahwa proyek tersebut tidak memiliki Microsoft.Net.Test.Sdk (tidak pernah menjadi masalah sebelumnya). Menambahkan nuget 16.6.1 dan kembali bekerja lagi.
bit0001
Bagus, saya tidak tahu itu. Saya diturunkan untuk membuatnya bekerja
Maximiliano Rios
1
Saya telah memperbaikinya dengan cara yang sama. Menurunkan versi paket xUnit.runner.visualstudio ke 2.4.1 telah memecahkan masalah.
Jacek Labuda
Saya dapat mengonfirmasi bahwa ini masih menjadi masalah dengan versi 2.4.3 dari xunit.runner.visualstudio. Downgrade ke 2.4.1 menyelesaikan masalah.
bN_
Saya harus menurunkan banyak proyek karena ini. Saya tidak sengaja meningkatkan semuanya dan berhenti berfungsi
Maximiliano Rios
5

Saya sedang membangun proyek uji netcoreapp2.2 dan kemudian mencoba untuk menjalankan dotnet vstestdari folder bin. Saya perhatikan bahwa Microsoft Test DLL dari:

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

tidak di-output ke folder bin saya. Alih-alih hanya membangun, saya menjalankan publikasi yang memang menyertakan DLL yang diperlukan di folder keluaran dan saya kemudian dapat menjalankan dotnet vstestdari sana.

Michael Armitage
sumber
3

Jika Anda menargetkan netstandard2.0, ini tidak akan berhasil. Jika menggunakan .NET Core. pastikan .csproj berisi baris berikut:

<TargetFramework>netcoreapp3.0</TargetFramework>

dan juga berisi paket Microsoft.NET.Test.Sdk

HarryKak
sumber
2

masalah yang sama yang saya hadapi untuk proyek Nunit (.net core 3.1). Saya menggunakan Microsoft.NET.Test.SDK v16.6.1, saya menurunkan versinya menjadi 15.9.0. Dan itu mulai bekerja

SaifAli Sanadi
sumber
1

Mengalami kesalahan ini, akar penyebabnya adalah pengujian mencapai panjang maksimum untuk jalur Windows (MAX_PATH), yang didefinisikan sebagai 260 karakter.

S1r-Lanzelot
sumber
0

Jika Anda menjalankan proyek dengan kloning daripada Solusi menginstal Microsoft.NET.Test.Sdk. Cara: Tools> Nuget Package Manager> Mengelola Paket Nuget Untuk Solusi ...> Cari Microsoft.NET.Test.Sdk dan instal untuk proyek pengujian Anda.

Shawon Barua
sumber
0

Ini juga bisa disebabkan oleh secara tidak sengaja mencoba menjalankan proyek non-tes, ini biasanya terjadi ketika filter file tes Anda terlalu lebar.

reim
sumber
0

Mendapat kesalahan ini, saat mencoba men-debug pengujian unit. Di bawah ini adalah langkah-langkah yang saya coba.

  • Langkah 1: Menginstal Microsof.TestPlatform.TestHost dan mencoba menjalankan pengujian tetapi tidak berhasil.
  • Langkah 2: Mengubah kerangka kerja Target dari .NET Core 2.0 menjadi 2.1 dan mencoba menjalankan pengujian tetapi tidak berhasil.
  • Langkah 3: Tutup dan buka VS2017 dan coba jalankan.

Yay !!! Berhasil :-) Jangan pernah melewatkan untuk mencoba langkah terakhir ;-) Semoga ini bisa membantu seseorang seperti saya.

Venu
sumber