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

98

У меня есть простая библиотека основных классов 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);
        }
    }
}

Если я войду в проект через интерфейс командной строки и наберу dotnet buildпроект builds. Если я напечатаю, 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.

Андреас
источник
150

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

R15
источник
Это уже было включено в мой пост, но вы правы: без него будут большие проблемы с запуском модульных тестов с ядром dotnet.
Matt W
2
«Microsoft.NET.Test.Sdk» был недостающим элементом, когда вы добавляли проект библиотеки классов и превращали его в тестовый проект. Наверное, лучше всего было бы добавить новый тестовый проект, а затем добавить необходимые пакеты nuget, такие как Rhino или Moq и т. Д.
Явар Муртаза
2
Создал .NET Standard 2.0 lib, добавил 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 в существующий проект;)
Лукаш Кмох
Это опечатка? Я не могу найти этого.
Мэтт В.
Если у вас есть существующий проект, вы можете передать его имя с помощью, --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.runner.visualstudio.

Евгений Игнациев
источник
8

Если вы используете 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. Я заметил, что тестовые библиотеки 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 символов.

S1r-Lanzelot
источник
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 и попытался запустить.

Ура!!! это сработало :-) Не упустите возможность попробовать последний шаг ;-) Надеюсь, это поможет кому-то вроде меня.

Venu
источник