Не вдається знайти testhost.dll. Опублікуйте свій тестовий проект і повторіть спробу


100

У мене є проста бібліотека основних класів dotnet з одним методом тестування 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);
        }
    }
}

Якщо я вводжу проект в CLI і вводжу dotnet buildзбірки проекту. Якщо я набираю текст, dotnet testя отримую це:

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.

Що потрібно змінити, щоб запустити тест?

Якщо це допомагає, VS Code також не відображає тести у своєму тестовому провіднику.


У моєму випадку це було те, що ви насправді не можете запускати тести проти netstandard2.0, оскільки це визначення API, а не час виконання. Якщо ви переключите TFM на net472, все працює нормально. Крім того, ви можете багатоцільно націлити на netcore + net472, наприклад, і побігти проти обох.
kzu

Відповіді:


25

У моєму випадку проблема полягала в тому, що я націлювався на .NET Core 2.0 і перехід на .NET Core 2.1 вирішив проблему. Однак я використовував Microsoft.NET.Test.SDK v16.4.0 замість 15.9.0.


154

Встановлення Microsoft.NET.Test.Sdkпакета з менеджера пакунків nuget вирішило мою проблему.


Це вже було включено до мого допису - але ви маєте рацію: без запуску модульних тестів із ядром dotnet будуть великі проблеми.
Matt W,

2
"Microsoft.NET.Test.Sdk" був відсутнім фрагментом, коли ви додаєте проект бібліотеки класів і перетворюєте його на тестовий проект. Напевно, найкраще зробити додаток нового тестового проекту, а потім додати необхідні nuget-пакети, такі як Rhino, Moq тощо ...
Явар Муртаза,

2
Створено бібліотеку .NET Standard 2.0, додано xunit, xunit.runner.visualstudioі Microsoft.NET.Test.Sdkдо проекту все той же результат. Я думаю, що тут є ще один фактор ...
Манфред,

12
Проблема в моєму випадку була спричинена створенням netstandard2.0проекту замість netcoreapp2.2проекту. Як тільки я перейшов на останнє, це спрацювало. Єдиними nuget-пакетами, які мені потрібні, були xunit, xunit.runner.visualstudioі Microsoft.NET.Test.Sdk.
Манфред

1
Встановлення Microsoft.NET.Test.Sdk у мене теж не спрацювало, ДО Я цього не зробив dotnet clean
IGx89

24

Я створив бібліотеку класів і спробував використовувати в ній пакет XUnit NuGet.

Те, що я повинен був зробити, було створено проект XUnit за допомогою цієї команди: dotnet new xunit -n TestProject

Я знайшов цю корисну сторінку .


3
Після виконання цієї команди, можливо, ви захочете оновити пакунки nuget новими посиланнями на проект.
Манфред

Або встановіть nuget xunit.runner.visualstudion до існуючого проекту;)
Lukáš Kmoch

Це друкарська помилка? Я не можу його знайти.
Matt W

Якщо у вас є вже існуючий проект, ви можете передати його, --forceщоб змусити його відновити проект як тестовий проект xUnit. Відповідно до коментаря @ Manfred, вам потрібно буде оновити / повторно додати всі посилання на проекти, які ви мали у цьому проекті.
Майлз,

1
@MattW Так, це схоже на друкарську помилку. Думаю, @Lukas мав на увазі, xunit.runner.visualstudioщо ви можете знайти на nuget.org/packages/xunit.runner.visualstudio
Манфред

12

У моєму випадку проблема полягала в тому, що у мене є проект розширення для xunit. Існує також тестовий проект для тестування розширень. Коли я працював dotnet testнад своїм рішенням, мій проект розширення також був обраний як проект модульного тесту (на це мені зайняв певний час). Причиною цього є те, що він посилається на деякі пакети xunit. Один із цих пакунків xunit автоматично встановлює <IsTestProject>true</IsTestProject>властивість у вашому файлі csprj. Це насправді добре, оскільки 99,99% проектів, що посилаються на xunit, насправді є модульними тестами. Я, нарешті, міг вирішити це, чітко встановивши

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

Вручну в моєму файлі csproj. Потім проблема пішла.


11

Це трапилося зі мною після оновлення Microsoft.NET.Test.Sdk з v16.2.0 до v16.4.0 за допомогою <TargetFramework>netcoreapp2.0</TargetFramework>. Оновлення для <TargetFramework>netcoreapp3.0</TargetFramework>вирішення проблеми для мене.



9

Якщо ви використовуєте xUnit, переконайтеся, що ваш тип проекту не такий, як netstanderd. Оскільки xUnit не підтримує netstanderd , змініть його на coreapp2.0 або інші.


Це, зокрема, була моя проблема. Дох! Я мав це зловити швидше. Дякуємо за вашу відповідь, оскільки це поставило мене на правильний шлях :)
Лідер розробника,

Змінивши тестовий проект на додаток .Net Core дозволило правильно встановити пакет xunit.runner.visualstudio. Зверніть увагу, що, можливо, вам доведеться закрити своє рішення та перезавантажити його, щоб VisualStudio впорядкував зміни.
Шелдон

8

Я стикався з цим пару разів і завжди забуваю, що відбувається. Зовсім недавно у мене було:

  • Бібліотека класів -> Націлювання .NET Core 3.0
  • Тестовий проект -> Націлювання .NET Core 3.1

Пакети для мого тестового проекту:

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

Я бачив:

Не вдається знайти C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll. Опублікуйте свій тестовий проект і повторіть спробу.

І все, що мені потрібно було зробити, це додати до мого тестового проекту відсутній пакет nuget: "Microsoft.NET.Test.SDK"

На цей момент все повернулося до звичного.


6

Я знайшов дуже цікаву проблему сумісності з версією. Я зробив оновлення як звичайна практика, мій код, і я перейшов на xUnit.runner.visualstudio 2.4.2. Він перестав працювати для .Net Core 3.1. Мені довелося перейти на версію 2.4.1, і вона знову запрацювала.


1
У мене була та ж проблема - для деяких тестових проектів у моєму рішенні. Загальним фактором для тестових проектів, які зазнали невдачі після оновлення до 2.4.2, було те, що в цих проектах бракувало Microsoft.Net.Test.Sdk (ніколи раніше не було проблемою). Додано nuget 16.6.1 і знову повернувся до роботи.
bit0001

Приємно, я цього не знав. Я знизив рейтинг, щоб це працювало
Максиміліано Ріос,

1
Я виправив це так само. Помилка пакета xUnit.runner.visualstudio до 2.4.1 вирішила проблему.
Яцек Лабуда

Я можу підтвердити, що це все ще проблема з версією 2.4.3 xunit.runner.visualstudio. Пониження до версії 2.4.1 вирішує проблему.
bN_

Через це мені довелося знизити багато проектів. Я випадково все оновив, і це перестало працювати
Максиміліано Ріос

5

Я будував тестовий проект netcoreapp2.2, а потім намагався запустити dotnet vstestз папки bin. Я помітив, що тестові бібліотеки DLL Microsoft від:

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

не виводилися в мою папку bin. Замість того, щоб просто будувати, я запустив публікацію, яка включала необхідні бібліотеки DLL у вихідну папку, і я тоді міг запустити dotnet vstestзвідти.


3

Якщо ви націлюєтесь на netstandard2.0, це не спрацює. Якщо ви використовуєте .NET Core. переконайтесь, що .csproj містить такі рядки:

<TargetFramework>netcoreapp3.0</TargetFramework>

а також містить упаковку Microsoft.NET.Test.Sdk


2

та сама проблема, з якою я стикався для проекту Nunit (.net core 3.1). Я використовував Microsoft.NET.Test.SDK v16.6.1, я знизив версію до 15.9.0. І це починає працювати


1

Виникла ця помилка. Основною причиною тестів було досягнення максимальної довжини шляху Windows (MAX_PATH), який визначається як 260 символів.


0

Якщо ви запускаєте проект шляхом клонування, рішенням є встановлення Microsoft.NET.Test.Sdk. Як: Інструменти> Менеджер пакунків Nuget> Керування пакетами Nuget для рішення ...> Знайдіть Microsoft.NET.Test.Sdk та встановіть для тестового проекту.


0

Це також може бути спричинено ненавмисною спробою запустити нетестовий проект, зазвичай це трапляється, коли фільтр тестових файлів занадто широкий.


0

Отримав цю помилку при спробі налагодити модульний тест. Нижче наведені кроки, які я спробував.

  • Крок 1: Встановив Microsof.TestPlatform.TestHost і спробував запустити тест, але не пощастило.
  • Крок 2: Змінено Target framework з .NET Core 2.0 на 2.1 і спробував запустити тест, але не пощастило.
  • Крок 3: Закрили та відкрили VS2017 і спробували запустити.

Ага !!! це спрацювало :-) Не пропустіть спробувати останній крок ;-) Сподіваюся, це допомагає комусь, як я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.