unit testing - 유닛 - Visual Studio 2017에서 단위 테스트를 발견하지 못했습니다.




유닛 테스트 방법 (20)

나는 그것을 설치 한 이후로 VS 2017에 고심하고있다. 이제 Unit Tests는 명령 행 "dotnet test"에서만 실행됩니다.

내 프로젝트는 .NET Core 1.1.1입니다. 1.1.1 용 SDK 및 프레임 워크 업데이트가 설치되어 있습니다.

MSDN ( https://msdn.microsoft.com/en-us/library/ms182532.aspx )에서 예제를 시도했는데 정확히 같은 방식으로 실패합니다.

테스트와 주요 프로젝트를위한 모든 NuGet 패키지는 최신 버전입니다. 테스트 프로젝트와 기본 프로젝트 모두 오류없이 빌드됩니다. 테스트가 명령 행에서 성공적으로 실행됩니다.

누구든지 VS 2017에서 실행되는 단위 테스트를 얻었습니까? 그렇다면 어떻게해야합니까?

고마워, 존

업데이트 - 확장

다음은 GitHub 작동하지 않는 간단한 테스트 프로젝트의 예입니다. 이것은 xUnit의 예제지만 NUnit과 Visual Studio에서 MS 테스트를 작성했습니다. 어떤 테스트 또는 변경 사항이 있더라도 VS 테스트 러너는 테스트를 찾을 수 없습니다.

나는 무엇을 시도 했는가?

  • VS 테스트 캐시 파일 삭제 DEL %TEMP%\VisualStudioTestExplorerExtensions
  • VS 다시 시작
  • 닫기 / 열기 테스트 탐색기
  • xUnit이 설치된 Microsoft.DotNet.InternalAbstractions ( SO 게시물 참조 )
  • NUnit에 대해 NUnit 패키지와 동일한 버전 (3)이 설치되어 있는지 확인하십시오.
  • test -> test settings -> default processor architecture 가 x86으로 설정되었습니다.

질문
누구든지 VS 테스트 탐색기가 단위 테스트를 성공적으로 찾 거나 주어진 예제에서 문제점을 표시하는 VS2017 (.csproj 프로젝트 파일)의 .Net Core 1.1.0 솔루션의 작동 예제를 제공 할 수 있습니까?


문제

문제는 Visual Studio가 컴퓨터의 dotnet 핵심 버전보다 '혼란 스럽습니다'라는 것입니다. 내가 제어판 -> 제거 프로그램에 갔을 때 나는 8 개의 다른 dotnet core SDK와 Runtime이 설치되어 있었다. 이것은 어떻게 든 테스트를 찾을 때 VS에 자동으로 오류가 발생했습니다.

문제 확인

명령 줄로 가서 $ dotnet --version 에 dotnet 버전을 가져와 문제를 확인할 수 있습니다. 설치 한 최신 버전을 제외한 다른 것을 발견하면 컴퓨터가 일부 불일치가 발생하고 올바른 버전을 사용하지 않습니다. 예 ... dotnet core 1.0.1 설치되어 있지만 명령 프롬프트에서 버전을 구할 때 문제가 1.0.0 경우.

해결책

모든 오래된 것들을 삭제하십시오. 나는 가장 오래된 dotnet rc 버전을 삭제할 필요가 있었지만 문제를 테스트 할 때 여전히 잘못된 버전을 제공하기 시작했다. 결국 저는 완전히 깨끗하게하는 것을 인정했습니다. 나는...

  • 모든 Visual Studio 응용 프로그램을 제거했습니다 (내 컴퓨터 VS2015 및 VS2017).
  • dotnet core의 모든 버전 (심지어 가장 최근 버전)을 제거했습니다.

내 컴퓨터가 완전히 VS와 donet을 모두 비운 후에 VS2017 설치했습니다 (최신 dotnet이 함께 제공됨). xUnit 테스트 프로젝트를 만들었고 테스트 탐색기가 즉시 테스트 결과를 찾았습니다.

이것은 잔인한 것처럼 보일지 모르지만 나는 다른 방법으로 이것을 고치려고 2 주를 보냈다. 문제가 발생한 경우 항목을 제거하거나 다시 설치하는 데 몇 시간이 걸릴 수 있지만 시간이 절약됩니다.

참고 문헌


발견

위의 대답은 나를 위해 작동하지 않았다. (재시작, 버전 1.1.18로 업데이트 ... 이미 임시 파일 삭제, NuGet 캐시 지우기 등).

내가 발견 한 것은 다른 테스트 프로젝트에서 MSTest.TestAdapter MSTest.Framework 에 대한 참조가 서로 다른 것입니다 (솔루션에 두 개가 있음). 하나는 1.1.18을 가리켰다.

packages.config

<package id="MSTest.TestAdapter" version="1.1.18" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.1.18" targetFramework="net461" />

... 그러나 다른 하나는 1.1.11에 대한 언급이 있습니다. 위의 답변 중 일부는 Visual Studio를 다시 시작한 후 라이브러리의 두 버전이 내 임시 디렉토리 (% TEMP % \ VisualStudioTestExplorerExtensions \)에 나타나면이 검색으로 이어집니다.

해결책

간단히 내 packages.config를 1.1.18 버전으로 업데이트하는 것이 VS에서 내 단위 테스트 기능을 복원 한 것입니다. MSTest 라이브러리를 나란히 참조 할 수없는 몇 가지 버그가있는 것으로 보입니다. 희망이 당신을 도와줍니다.

더 많은 정보:

  • Visual Studio 2017 Ent : 15.5.6 (이 문제를 해결하기를 희망하면서 15.0.1에서 업데이트했지만 두 가지 모두에 포함 시켰습니다)


NUnit 3 테스트 어댑터가 활성화되어 있는지 확인하십시오. 제 경우에는 오래 전에 이미 설치했지만, 갑자기 장애가 발생했습니다. 그 부분을 확인하기로 결정하기 전에 꽤 오래 걸렸어.


Visual Studio 2017의 출시와 project.json 형식에서 csproj 형식으로의 이전과 함께 .NET Core 용 테스트 어댑터 용 API가 변경되었습니다. 이로써 dotnet-test-nunit 과 같은 기존의 dotnet-test-* 어댑터가 폐기되었습니다.

어댑터가 업데이트되었지만 Visual Studio 또는 명령 줄에서 dotnet test 를 설정하고 실행하는 방법은 테스트 프로젝트에서 다른 참조가 필요합니다. 참조 패키지가 구형이기 때문에 dotnet-test-* 형식으로 찾은 모든 문서를 주의하십시오 .

첫째, 테스트 프로젝트는 .NET Core 또는 .NET Framework와 같은 특정 플랫폼을 대상으로해야합니다. 테스트중인 코드가 .NET 표준 인 경우에도 .NET Standard를 대상으로 할 수 없습니다 . 이는 테스트 대상이 테스트를 실행할 플랫폼을 나타 내기 때문입니다. .NET Standard는 많은 플랫폼에서 실행될 수 있다는 점에서 PCL (Portable Class Library)과 같습니다.

다음으로 Microsoft.NET.Test.Sdk 에 대한 참조, 테스트 프레임 워크 및 호환 가능한 테스트 어댑터를 추가해야합니다. NUnit에 대한 참조는 다음과 같습니다.

<itemgroup>
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
    <packagereference Include="NUnit" Version="3.7.1"></packagereference>
    <packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>

위의 설명은 추가,

<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

이것은 꼭 필요한 것은 아니지만 도움이 될 수 있습니다. Visual Studio에서 모든 단위 테스트 프로젝트에 자동으로 추가되어 테스트를 통해 신속하게 프로젝트를 찾을 수 있습니다.

Visual Studio에 테스트가 표시되지 않으면 먼저 솔루션을 닫은 다음 다시 여는 것이 좋습니다. Visual Studio에서 프로젝트를 편집 할 때 변경 사항을 감지하지 못하는 버그가있는 것 같습니다.

자세한 내용 은 Visual Studio에서 NUnit을 사용하여 .NET Core 테스트 2017을 참조하십시오.


Visual Studio에서 내 테스트를 찾을 수 없거나 메서드를 실행하기위한 단추를 볼 수 없으며 프로젝트의 모든 테스트를 실행하여이 픽업을받지 못했습니다.

내 테스트 수업이 공개되지 않았다고 밝혀졌습니다! VS가 테스트를 발견하도록 공개했습니다.


나는 같은 문제가 있었다. 내 솔루션은 괜찮 았지만 갑자기 솔루션을 열었을 때 테스트가 종료되었음을 알게되었습니다.

마지막으로 Microsoft.VisualStudio.TestPlatform.TestFrameworkMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensions 패키지를 NuGet 관리자를 사용하여 매우 오래된 버전으로 다운 그레이드하고 테스트 메서드가 나타났습니다. 그런 다음 최신 버전으로 업그레이드했지만 아직 거기에있었습니다.

따라서 패키지를 다운 그레이드하고 업그레이드하십시오.


나는 다음과 같은 일을함으로써 같은 문제를 가지고 일하게 만들었다. :

  • 먼저 열려있는 모든 Visual Studio 인스턴스를 닫고이 폴더 (% TEMP % \ VisualStudioTestExplorerExtensions)를 삭제하십시오. ( Visual Studio로 테스트 실행 )
  • Nuget 패키지 관리자로 가서 Microsoft.NET.Test.Sdk (15.3.0-preview-20170425-07)를 먼저 설치 한 다음 xunit.runner.visualstudio (2.3.0-beta1-build1309)를 설치하십시오. 내 검사를 탐지하기 위해 최신 VS 2017을 설치하기 위해 설치해야하는 모든 패키지를 보려면 첨부 된 Nuget 스크린 샷을 참조하십시오.

나를 위해, 테스트 프로젝트의 .csproj 파일에서 TargetFramework를

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

일했다.


내 UnitTest를 찾는 VS 2017에 문제가있었습니다. 그것은 John이 묻는 정확한 문제는 아니지만 - 이것이 내가 찾던 Google의 첫 번째 결과이므로 내 문제를 공유하고 싶었습니다.

VS2010, VS2015 이상으로가는 VS2010에서 돌아 오는 기존 솔루션이있었습니다. 이제 VS2017에서 [TestMethod] 속성의 네임 스페이스가 변경된 것 같습니다.

사용하기 전에

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0

프로젝트에 새 Test.dll을 만들었고 기본적으로이 파일을 사용했습니다.

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0

그래서 제 솔루션은 VS2017에서 새로운 UnitTest 프로젝트를 만드는 것이 었습니다. 어쩌면 이전 테스트 프로젝트의 어셈블리 참조를 변경하는 것도 효과가있었습니다. 새로운 레퍼런스 VS2017은 이러한 단위 테스트를 발견했습니다.


내 경우에는 위의 어느 것도 나에게 도움이되지 않습니다. 하지만, NUMit3TestAdapter를 버전 3.8.0으로 다운 그레이드 한 다음 최신 (3.10.0)


내 경우에는 이전 .NET 버전에서 테스트 프로젝트를 업그레이드 한 프로젝트였습니다. app.config에서 이전 버전의 종속 어셈블리에 대한 어셈블리 바인딩이있었습니다.

app.config에서 assembnlybindings를 수정 한 후 내 테스트가 발견되었습니다.


때로는 단위 테스트 코드에 예외가있는 경우 Visual Studio에서 해당 단위 테스트 사례가 실행되지 않은 것으로 표시하고이 사례를 따르는 다른 테스트 사례 실행을 중지합니다.

이 경우 예외를 일으키는 케이스를 찾아야합니다.


때로는 테스트의 네임 스페이스를 변경하면됩니다. 폴더 구조는 다음과 같습니다.

A |___B | |___D |___C___E

네임 스페이스는 Tests. <name>과 같이 평면이었으며 테스트 창에 표시되지 않았습니다. 네임 스페이스를 디렉토리 구조로 변경하면 모든 테스트가 나타났습니다. 이제 원하는 다른 네임 스페이스 구조로 되돌릴 수 있습니다.

프로젝트를 만드는 것을 잊지 마십시오!


오래된 .dll을 제거하면 도움이됩니다. C : \ Users (사용자 이름) \ AppData \ Local \ Temp의 % TEMP % 디렉터리에있는 임시 파일 지우기


올바른 Microsoft.NET.Test.Sdk를 사용하고 있는지 확인하십시오.

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

시험판을 사용하지 마십시오. 또는 콘솔 앱 (라이브러리 아님)으로 변경해야합니다. 비슷한 문제가 있지만 최신 릴리스 (15.0.0)로 다시 작업하기 시작합니다.

또한 다음을 추가해야 할 수도 있습니다.

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>

그러나 나는 이것이 내성이라고 생각하지 않는다.


제 경우에는 문제를 일으키는 솔루션에 UWP 프로젝트가있었습니다.

UWP 프로젝트를 언로드했을 때 테스트가 발견되었습니다. 다시로드하면 테스트가 다시 사라집니다.

모든 프로젝트를 언로드하고 테스트 프로젝트 만 유지하십시오. 테스트 러너에는 10 개의 재구성 솔루션과 테스트 섀넌이 나타납니다. 하나씩 프로젝트를로드하고 문제가 발생한 프로젝트를 찾을 때마다 솔루션을 다시 빌드하십시오.

샘플 레포

VS 버그 보고서


제 경우에는 테스트 어댑터와 테스트 프레임 워크를 업그레이드 하기 만하면됩니다. 끝난.

NuGet Package Manager를 사용한 예 :


처음에는 MSTest를 사용하려고했습니다. 그 후 Nunit 테스트로 변경합니다. 그런 다음 MSTest를 되돌리고 싶었습니다. 모든 nUnit 코드와 참조를 제거했지만 테스트 탐색기에 MSTest 메소드가 표시되지 않았습니다. 해결책 : 모든 mstest nuget 참조를 제거하고 다시 설치했습니다. 끝난.


테스트 클래스를 공개적 으로 만드는 것을 잊어 버리면 내부의 테스트 메소드가 발견되지 않습니다.

기본 xUnit 프로젝트를 가지고 UnitTest1.cs 샘플을 삭제하고 컨트롤러 테스트 클래스로 대체했습니다. 몇 가지 테스트가 있지만 아무 것도 발견되지 않았습니다.

짧은 이야기, xUnit, Test.Sdk, xUnit.runner 패키지를 업데이트하고 프로젝트를 재 구축 한 후 빌드 오류가 발생했습니다.

오류 xUnit1000 테스트 클래스는 공개 여야합니다.

고맙게도 업데이트 된 버전은이 예외를 던져서 문제를 해결했습니다.

테스트 클래스를 공개로 수정하여 내 문제 해결





visual-studio-2017