testhost.dll을 찾을 수 없습니다. 테스트 프로젝트를 게시하고 다시 시도하십시오.


113

단일 XUnit 테스트 메서드가있는 간단한 dotnet 코어 클래스 라이브러리가 있습니다.

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는 테스트 탐색기에도 테스트를 표시하지 않습니다.


제 경우에는 런타임이 아닌 API 정의이기 때문에 netstandard2.0에 대해 실제로 테스트를 실행할 수 없다는 것이 었습니다. TFM을 net472로 전환하면 정상적으로 작동합니다. 또는 예를 들어 netcore + net472로 다중 대상을 지정하고 둘 다에 대해 실행할 수 있습니다.
kzu

답변:


25

제 경우 문제는 .NET Core 2.0을 대상으로하고 .NET Core 2.1로 전환하면 문제가 해결된다는 것입니다. 그러나 15.9.0 대신 Microsoft.NET.Test.SDK v16.4.0을 사용하고있었습니다.


178

Microsoft.NET.Test.Sdknuget 패키지 관리자에서 패키지를 설치하면 문제가 해결되었습니다.


그것은 이미 내 게시물에 포함되었지만 당신이 맞습니다. dotnet 코어없이 단위 테스트를 실행하는 데 큰 문제가있을 것입니다.
Matt W

2
"Microsoft.NET.Test.Sdk"는 클래스 라이브러리 프로젝트를 추가하고이를 테스트 프로젝트로 전환 할 때 누락 된 부분이었습니다. 아마 할 수있는 가장 좋은 것은 ... 새로운 테스트 프로젝트는 다음 등 코뿔소 또는 MOQ처럼 필요 nuget 패키지를 추가하는 것
야와 르 Murtaza

3
만든 .NET 표준 2.0 lib에 추가 xunit, xunit.runner.visualstudioMicrosoft.NET.Test.Sdk프로젝트, 여전히 같은 결과에. 나는 또 다른 요소가 있다고 생각한다 ...
Manfred

12
제 경우의 문제는 netstandard2.0프로젝트 대신 프로젝트를 생성하여 발생했습니다 netcoreapp2.2. 후자로 전환하자마자 작동했습니다. 필요한 유일한 너겟 패키지는 xunit, xunit.runner.visualstudioMicrosoft.NET.Test.Sdk.
Manfred

1
내가 한 UNTIL Microsoft.NET.Test.Sdk가 어느 날 위해 작동하지 않았다 설치 dotnet clean
IGx89

26

클래스 라이브러리를 만들고 그 안에 XUnit NuGet 패키지를 사용하려고했습니다.

내가해야 할 일은 다음 명령을 사용하여 XUnit 프로젝트를 만드는 것입니다. dotnet new xunit -n TestProject

이 유용한 페이지를 찾았습니다 .


3
이 명령을 실행 한 후 새 프로젝트가 참조하는 너겟 패키지를 업데이트 할 수 있습니다.
Manfred

또는 기존 프로젝트에 nuget xunit.runner.visualstudion 설치;)
Lukáš Kmoch

오타입니까? 나는 그것을 찾을 수 없습니다.
Matt W

기존 프로젝트가있는 경우 해당 이름을 전달 --force하여 프로젝트를 xUnit 테스트 프로젝트로 다시 빌드하도록 할 수 있습니다. @Manfred의 의견에 따라 해당 프로젝트에 포함 된 모든 프로젝트 참조를 업데이트 / 다시 추가해야합니다.
Myles

1
@MattW 예, 오타처럼 보입니다. 나는 의미 @Lukas 생각 xunit.runner.visualstudio당신이에서 찾을 수 있습니다 nuget.org/packages/xunit.runner.visualstudio
만프레드

14

제 경우 문제는 xunit에 대한 확장 프로젝트가 있다는 것입니다. 확장을 테스트하는 테스트 프로젝트도 있습니다. dotnet test솔루션을 실행했을 때 확장 프로젝트도 단위 테스트 프로젝트로 선택되었습니다 (이를 실현하는 데 시간이 좀 걸렸습니다). 그 이유는 일부 xunit 패키지를 참조하기 때문입니다. 이러한 xunit 패키지 중 하나는 <IsTestProject>true</IsTestProject>csprj 파일에 속성을 자동으로 설정 합니다. xunit을 참조하는 프로젝트의 99.99 %가 실제로 단위 테스트이기 때문에 이것은 실제로 좋은 것입니다. 마침내 명시 적으로 설정하여 해결할 수 있습니다.

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

내 csproj 파일에서 수동으로. 그런 다음 문제가 사라졌습니다.


12

이는 Microsoft.NET.Test.Sdk를 v16.2.0에서 v16.4.0으로 <TargetFramework>netcoreapp2.0</TargetFramework>. <TargetFramework>netcoreapp3.0</TargetFramework>나를 위해 문제 를 해결하기 위해 업데이트했습니다 .



10

xUnit을 사용하는 경우 프로젝트 유형이 netstanderd가 아닌지 확인하십시오. xUnit은 netstanderd를 지원하지 않으므로 coreapp2.0 또는 기타로 변경하십시오.


이것은 특히 내 문제였습니다. 도! 나는 그것을 더 빨리 잡았어야했다. 답장을 보내 주셔서 감사합니다. :)
Dev Leader

테스트 프로젝트를 .Net Core 앱으로 변경하면 xunit.runner.visualstudio 패키지가 올바르게 설치됩니다. VisualStudio가 변경 사항을 정렬하려면 솔루션을 닫고 다시로드해야 할 수 있습니다.
Sheldon

10

나는 이것을 몇 번 만났고 나는 항상 무슨 일인지 잊어 버립니다. 가장 최근에 나는 :

  • 클래스 라이브러리-> .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을 찾을 수 없습니다. 테스트 프로젝트를 게시하고 다시 시도하십시오.

그리고 내가해야 할 일은 테스트 프로젝트에 누락 된 너겟 패키지 인 "Microsoft.NET.Test.SDK"를 추가하는 것뿐이었습니다.

이 시점에서 모든 것이 정상으로 돌아 왔습니다.


8

버전에서 매우 흥미로운 호환성 문제를 발견했습니다. 일반적인 연습과 마찬가지로 코드를 업그레이드하고 xUnit.runner.visualstudio 2.4.2로 전환했습니다. .Net Core 3.1에서 작동이 중지되었습니다. 2.4.1로 다운 그레이드해야했고 다시 작동하기 시작했습니다.

내 의견 중 하나 뒤에 추가 정보.

xunit.runner.visualstudio 버전 <= 2.4.1 패키지에는 Microsoft.NET.Test.Sdk에 대한 참조가 포함되어 있습니다. 이후 버전은 그렇지 않으므로 프로젝트에 참조를 추가해야합니다.

stackoverflow.com/a/63786758/3248302 참조


1
내 솔루션의 일부 테스트 프로젝트에서 동일한 문제가 발생했습니다. 2.4.2로 업데이트 한 후 실패한 테스트 프로젝트의 공통 요인은 해당 프로젝트에 Microsoft.Net.Test.Sdk가 누락 된 것입니다 (이전에는 문제가 없었 음). 16.6.1 너겟을 추가하고 다시 작동했습니다.
bit0001

좋아, 몰랐어. 작동하도록 다운 그레이드했습니다.
Maximiliano Rios

1
같은 방식으로 수정했습니다. xUnit.runner.visualstudio 패키지를 2.4.1로 다운 그레이드하면 문제가 해결되었습니다.
Jacek Labuda 20.06.08

1
xunit.runner.visualstudio의 2.4.3 버전에서 여전히 문제가 있음을 확인할 수 있습니다. 2.4.1로 다운 그레이드하면 문제가 해결됩니다.
bN_

1
xunit.runner.visualstudio버전 <= 2.4.1에는 Microsoft.NET.Test.Sdk. 이후 버전은 그렇지 않으므로 프로젝트에 참조를 추가해야합니다. stackoverflow.com/a/63786758/3248302를 참조하십시오 .
Blisco 2011

5

netcoreapp2.2 테스트 프로젝트를 빌드 한 다음 dotnet vstestbin 폴더에서 실행하려고했습니다 . 다음에서 Microsoft Test DLL을 발견했습니다.

<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

이 오류가 발생했을 때 근본 원인은 테스트가 260 자로 정의 된 Windows 경로 (MAX_PATH)의 최대 길이에 도달했기 때문입니다.


1

이 오류는 xunit.runner.visualstudio2.4.1보다 높은 버전으로 업그레이드하는 경우 발생할 수 있습니다 . 2.4.1 이하 버전에는 다음에 대한 참조가 포함됩니다.Microsoft.NET.Test.Sdk 되지만 이후 버전에는 포함되지 않으므로 자체 프로젝트에 참조를 포함해야합니다.

흥미롭게도, NCrunch는 CLI를 통해 실행할 수 없었지만 추가 참조없이 테스트를 실행했습니다.


0

프로젝트를 복제하여 실행하는 경우 솔루션보다 Microsoft.NET.Test.Sdk를 설치하는 것입니다. 방법 : 도구> Nuget 패키지 관리자> 솔루션 용 Nuget 패키지 관리 ...> Microsoft.NET.Test.Sdk를 검색하고 테스트 프로젝트를 설치합니다.


0

이는 실수로 테스트가 아닌 프로젝트를 실행하려고 할 때 발생할 수도 있습니다. 일반적으로 테스트 파일 필터가 너무 넓을 때 발생합니다.


0

단위 테스트를 디버그하려고 할 때이 오류가 발생했습니다. 아래는 내가 시도한 단계입니다.

  • 1 단계 : Microsof.TestPlatform.TestHost를 설치하고 테스트를 실행했지만 운이 없습니다.
  • 2 단계 : 대상 프레임 워크를 .NET Core 2.0에서 2.1로 변경하고 테스트를 실행하려고했지만 운이 없었습니다.
  • 3 단계 : VS2017을 닫고 열고 실행을 시도했습니다.

예! 그것은 일했습니다 :-) 마지막 단계를 시도하는 것을 절대 놓치지 마십시오 ;-) 이것이 나와 같은 사람을 돕기를 바랍니다.


0

Microsoft.TestPlatform.TestHost얻기 위해 추가 해야 했다 testhost.dll. 이 답변에서 https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546


다른 사람들에게 신용을주는 것은 좋지만 여기 stackoverflow에서 여기에 충분한 정보를 포함하는 것이 좋습니다. 귀하가 제공 한 웹 링크가 언젠가 깨지거나 유효하지 않게되는 경우를 대비하십시오.
tgolisch

알겠습니다. 링크를 다시 방문했는데 내 답변에 추가 할 정보가 없습니다. 그럼 제거하는 게 좋을까요?
Äkwav

1
실제로 귀하의 답변이 도움이되는 것 같습니다. 나는 당신이 그것을 삭제하는 것을 제안하지 않습니다. 커뮤니티 표준은 답변에 링크 대신 정보를 포함하도록 권장하므로 (표절이 아닌 패러 프레이즈) 정보는 S / O에 있으며 클릭하지 않아도됩니다.
tgolisch

0

제 경우에는 nuget을 사용하여 MsTest.TestAdapter 모듈에 대한 참조를 포함해야했습니다.

MSTest.TestFramework 및 Microsoft.Net.Test.Sdk가 포함 된 새로운 프로젝트로는 단일 단위 테스트를 실행할 수 없었습니다.

필자의 경우 .NET core가 아닌 .NET Framework 4.8을 대상으로하는 테스트 프로젝트를 사용하고 있음을 알았습니다. 이 수정 사항이 해당 플랫폼에도 적용될 수 있다고 강력히 믿습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.