Testhost.dll bulunamıyor. Lütfen test projenizi yayınlayın ve yeniden deneyin


100

Tek bir XUnit test yöntemiyle basit bir dotnet çekirdek sınıf kitaplığım var:

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

Projeyi CLI'ye girersem ve dotnet buildproje yapılarını yazarsam. Yazarsam şunu dotnet testalırım:

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.

Testi çalıştırmak için neyi değiştirmem gerekiyor?

Yardımcı olursa, VS Code testleri kendi test gezgininde de göstermiyor.


Benim durumumda, netstandard2.0'a karşı testler çalıştıramazsınız, çünkü bu bir çalışma zamanı değil, bir API tanımıdır. TFM'yi net472'ye geçirirseniz, her şey yolunda gider. Alternatif olarak, örneğin netcore + net472'ye çoklu hedefleme yapabilir ve her ikisine karşı koşabilirsiniz.
kzu

Yanıtlar:


25

Benim durumumda sorun, .NET Core 2.0'ı hedeflememdi ve .NET Core 2.1'e geçiş sorunu çözdü. Ancak 15.9.0 yerine Microsoft.NET.Test.SDK v16.4.0 kullanıyordum.


154

Microsoft.NET.Test.SdkNuGet paket yöneticisinden paket yüklemek sorunumu çözdü.


Bu zaten benim yazıma dahil edildi - ama haklısınız: dotnet çekirdeği olmadan birim testlerini çalıştırmada büyük sorunlar olacak.
Matt W

2
Bir sınıf kitaplığı projesi eklediğinizde ve bunu bir test projesine dönüştürdüğünüzde "Microsoft.NET.Test.Sdk" eksik parçaydı. Muhtemelen yapılacak en iyi şey, yeni bir test projesi eklemek ve ardından Rhino veya Moq gibi gerekli nuget paketlerini eklemek olacaktır ...
Yawar Murtaza

2
Düzenlendi NET Standard 2.0 lib ekledi xunit, xunit.runner.visualstudiove Microsoft.NET.Test.Sdkproje hala aynı sonuca. Sanırım oyunda başka bir faktör daha var ...
Manfred

12
Benim durumumdaki sorun, bir netstandard2.0proje yerine bir proje oluşturmaktan kaynaklanıyordu netcoreapp2.2. İkincisine geçer geçmez işe yaradı. İhtiyacım olan tek nuget paketleri xunit, xunit.runner.visualstudiove idi Microsoft.NET.Test.Sdk.
Manfred

1
Benim için Microsoft.NET.Test.Sdk yüklemek de işe yaramadı, KADAR dotnet clean
IGx89

24

Bir sınıf kitaplığı oluşturdum ve içinde XUnit NuGet paketini kullanmaya çalıştım.

Yapmam gereken şey, bu komutu kullanarak bir XUnit projesi oluşturmaktı: dotnet new xunit -n TestProject

Bu yararlı sayfayı buldum .


3
Bu komutu çalıştırdıktan sonra nuget paketlerini yeni proje referanslarını güncellemek isteyebilirsiniz.
Manfred

Veya mevcut projeye nuget xunit.runner.visualstudion kurun;)
Lukáš

Bu bir yazım hatası mı? Onu bulamıyorum.
Matt W

Mevcut bir projeniz varsa --force, projeyi bir xUnit test projesi olarak yeniden oluşturmaya zorlamak için bunun adını ile iletebilirsiniz. @ Manfred'in yorumuna göre, o projede sahip olduğunuz tüm proje referanslarını güncellemeniz / yeniden eklemeniz gerekir.
Myles

1
@MattW Evet, bu bir yazım hatası gibi görünüyor. Sanırım @Lukas xunit.runner.visualstudio, nuget.org/packages/xunit.runner.visualstudio
Manfred

12

Benim durumumda sorun xunit için bir uzatma projem olmasıydı. Uzantıları test etmek için bir test projesi de var. dotnet testÇözümümü çalıştırdığımda , uzatma projem de bir birim test projesi olarak seçildi (bunu fark etmem biraz zaman aldı). Bunun nedeni, bazı xunit paketlerine başvurmasıdır. Bu xunit paketlerinden biri, <IsTestProject>true</IsTestProject>csprj dosyanızdaki özelliği otomatik olarak ayarlar . Bu aslında iyi bir şey çünkü xunit'i referans alan projelerin% 99,99'u aslında birim testleri. Sonunda bunu açıkça ayarlayarak çözebilirim

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

Csproj dosyamda manuel olarak. Sonra sorun ortadan kalktı.


11

Bu, Microsoft.NET.Test.Sdk'yi v16.2.0'dan v16.4.0'a güncelledikten sonra oldu <TargetFramework>netcoreapp2.0</TargetFramework>. <TargetFramework>netcoreapp3.0</TargetFramework>Sorunu benim için çözecek şekilde güncelleme .



9

XUnit kullanıyorsanız, proje türünüzün netstanderd kadar olmadığından emin olun. XUnit netstanderd'i desteklemediğinden , onu coreapp2.0 veya başka bir şeye değiştirin.


Bu özellikle benim sorunumdu. Doh! Bunu daha erken yakalamalıydım. Beni doğru yola koyan yanıtınız için teşekkürler :)
Dev Leader

Test projesini .Net Core uygulaması olacak şekilde değiştirmek, xunit.runner.visualstudio paketinin doğru şekilde yüklenmesine izin verdi. VisualStudio'nun değişiklikleri ayarlaması için muhtemelen çözümünüzü kapatıp yeniden yüklemeniz gerekeceğini lütfen unutmayın.
Sheldon

8

Bununla birkaç kez karşılaştım ve ne olduğunu hep unutuyorum. Son zamanlarda sahip oldum:

  • Sınıf Kitaplığı -> .NET Core 3.0'ı Hedefleme
  • Test Projesi -> .NET Core 3.1'i Hedefleme

Test projem için paketler:

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

Görüyordum:

C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll bulunamıyor. Lütfen test projenizi yayınlayın ve yeniden deneyin.

Ve tek yapmam gereken, test projeme eksik nuget paketini eklemekti: "Microsoft.NET.Test.SDK"

Bu noktada her şey normale döndü.


6

Bir sürümle ilgili çok ilginç bir uyumluluk sorunu buldum. Kodumu normal bir uygulama olarak yükselttim ve xUnit.runner.visualstudio 2.4.2'ye geçtim. .Net Core 3.1 için çalışmayı durdurdu. 2.4.1'e düşürmek zorunda kaldım ve tekrar çalışmaya başladı.


1
Aynı sorunu yaşadım - çözümümdeki bazı test projeleri için. 2.4.2'ye güncellemeden sonra başarısız olan test projeleri için ortak faktör, bu projelerin Microsoft.Net.Test.Sdk (daha önce hiç sorun olmamıştı) eksik olmasıydı. 16.6.1 nuget eklendi ve tekrar çalışmaya başladı.
bit0001

Güzel, bunu bilmiyordum. Çalışması için indirgeme yaptım
Maximiliano Rios

1
Ben de aynı şekilde düzelttim. XUnit.runner.visualstudio paketinin 2.4.1 sürümüne düşürülmesi sorunu çözdü.
Jacek Labuda

Xunit.runner.visualstudio'nun 2.4.3 sürümünde hala sorun olduğunu doğrulayabilirim. 2.4.1'e düşürmek sorunu çözer.
bN_

Bu nedenle birçok projeyi düşürmek zorunda kaldım. Yanlışlıkla her şeyi yükselttim ve çalışmayı durdurdu
Maximiliano Rios

5

Bir netcoreapp2.2 test projesi oluşturuyordum ve ardından dotnet vstestbin klasöründen çalıştırmaya çalışıyordum . Microsoft Test DLL'lerinin şunlardan geldiğini fark ettim:

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

bin klasörüme çıkarılmıyordu. Sadece inşa etmek yerine, çıktı klasörüne gerekli DLL'leri içeren bir yayın yaptım ve oradan da çalıştırabildim dotnet vstest.


3

Netstandard2.0'ı hedefliyorsanız, bu işe yaramayacaktır. .NET Core kullanıyorsanız. .csproj dosyasının aşağıdaki satırları içerdiğinden emin olun:

<TargetFramework>netcoreapp3.0</TargetFramework>

ve ayrıca paketi içerir Microsoft.NET.Test.Sdk


2

Nunit (.net çekirdek 3.1) projesi için karşılaştığım sorun aynı. Microsoft.NET.Test.SDK v16.6.1 kullanıyordum, sürümü 15.9.0'a düşürdüm. Ve çalışmaya başlıyor


1

Bu hatayla karşılaşıldığında, temel neden testlerin 260 karakter olarak tanımlanan bir Windows yolu (MAX_PATH) için maksimum uzunluğa ulaşmasıydı.


0

Çözüm yerine klonlayarak bir proje çalıştırıyorsanız, Microsoft.NET.Test.Sdk. Nasıl yapılır: Araçlar> Nuget Paket Yöneticisi> Çözüm İçin Nuget Paketlerini Yönet ...> Microsoft.NET.Test.Sdk'yi arayın ve test projeniz için yükleyin.


0

Bu, yanlışlıkla test dışı bir proje çalıştırmaya çalışmaktan da kaynaklanabilir, bu genellikle test dosyaları filtreniz çok geniş olduğunda gerçekleşir.


0

Bir birim testinde hata ayıklamaya çalışırken bu hatayı aldım. Aşağıda denediğim adımlar verilmiştir.

  • Adım 1: Microsof.TestPlatform.TestHost'u kurdu ve testi çalıştırmayı denedi ancak şans yok.
  • Adım 2: Hedef çerçeve .NET Core 2.0'dan 2.1'e değiştirildi ve testi çalıştırmayı denedi ancak şans yok.
  • Adım 3: VS2017 kapatılıp açıldı ve çalıştırılmaya çalışıldı.

Yaşasın!!! işe yaradı :-) Son adımı denemeyi asla kaçırmayın ;-) Umarım bu benim gibi birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.