Не вдається знайти 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.