편집

다음을 통해 공유


Live Unit Testing 질문과 대답

지원되는 프레임워크

Live Unit Testing에서 지원하는 테스트 프레임워크는 무엇이며 지원되는 최소 버전은 무엇인가요?

Live Unit Testing은 다음 표에 나열된 인기 있는 세 가지 단위 테스트 프레임워크와 함께 작동합니다. 해당 어댑터 및 프레임워크의 지원되는 최소 버전도 표에 나열됩니다. 단위 테스트 프레임워크는 모두 NuGet.org 사용할 수 있습니다.

테스트 프레임워크 Visual Studio 어댑터 최소 버전 프레임워크 최소 버전
xUnit.net xunit.runner.visualstudio 버전 2.2.0-beta3-build1187 xunit 1.9.2
NUnit NUnit3TestAdapter 버전 3.7.0 NUnit 버전 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

Microsoft.VisualStudio.QualityTools.UnitTestFramework 참조하는 이전 MSTest 기반 테스트 프로젝트가 있고 최신 MSTest NuGet 패키지로 이동하지 않으려는 경우 Visual Studio 2019 또는 Visual Studio 2017로 업그레이드합니다.

.NET Core 지원

Live Unit Testing은 .NET Core에서 작동하나요?

예. Live Unit Testing은 .NET Core 및 .NET Framework에서 작동합니다.

구성

Live Unit Testing을 켜면 작동하지 않는 이유는 무엇인가요?

출력 창(Live Unit Testing 드롭다운이 선택된 경우)에서는 Live Unit Testing이 작동하지 않는 이유를 알려야 합니다. Live Unit Testing은 다음 이유 중 하나로 작동하지 않을 수 있습니다.

  • 솔루션의 프로젝트에서 참조하는 NuGet 패키지가 복원되지 않은 경우 Live Unit Testing이 작동하지 않습니다. Live Unit Testing을 켜기 전에 솔루션의 명시적 빌드를 수행하거나 솔루션에서 NuGet 패키지를 복원하면 이 문제가 해결됩니다.

  • 프로젝트에서 MSTest 기반 테스트를 사용하는 경우 Microsoft.VisualStudio.QualityTools.UnitTestFramework대한 참조를 제거하고 최신 MSTest NuGet 패키지, MSTest.TestAdapter(최소 버전 1.1.11 필요) 및 MSTest.TestFramework(최소 버전 1.1.11 필요)에 대한 참조를 추가해야 합니다. 자세한 내용은 Visual Studio Live Unit Testing 사용 문서의 "지원되는 테스트 프레임워크" 섹션을 참조하세요.

  • 솔루션에서 하나 이상의 프로젝트에는 NuGet 참조 또는 xUnit, NUnit 또는 MSTest 테스트 프레임워크에 대한 직접 참조가 있어야 합니다. 이 프로젝트는 해당 Visual Studio 테스트 어댑터 NuGet 패키지도 참조해야 합니다.

내 프로젝트가 빌드되지 않는 이유는 무엇인가요?

Live Unit Testing 드롭다운을 선택하면 빌드 오류가 출력 창에 보고됩니다. Live Unit Testing에서 빌드 문제를 일으킬 수 있는 설치 마법사 잘못된 구성으로 인해 발생하는 몇 가지 일반적인 문제가 있습니다.

  • 작업 영역 루트 속성이 너무 길면 경로가 너무 길다는 예외로 인해 빌드가 실패할 수 있습니다.

  • 리포지토리 루트 속성이 리포지토리 루트를 가리키지 않으면 작업 영역이 잘못된 파일 집합으로 채워집니다.

  • git 리포지토리의 경우 제외 파일 속성은 일반적으로 gitignore 파일에 지정된 파일을 복사하지 않습니다. 그러나 무시되는 git 리포지토리에 파일을 체크 인하거나 파일을 자동으로 생성하는 도구를 실행할 수 있지만 빌드 중에는 생성되지 않습니다. 이러한 경우 "<사용자 지정>" 옵션을 선택해야 하며 아티팩트 폴더만 나열하는 사용자 지정 규칙 집합을 나열해야 합니다.

앞에서 설명한 문제 외에도 올바르게 빌드되지 않을 수 있는 다음 프로젝트 구성이 있습니다.

  • 프로젝트 종속성이 각 프로젝트에 대한 ProjectReferences 아닌 전역 솔루션 구성으로 지정된 경우 Live Unit Testing은 잘못된 프로젝트 집합을 빌드하게 될 수 있습니다. 이 문제를 해결하려면 프로젝트 간에 명시적 참조를 추가합니다.

  • Live Unit Testing 재생 목록 선택될 때까지 Live Unit Testing은 프로젝트를 빌드하지 않습니다. 이 문제를 해결하려면 Live Unit Testing 재생 목록에 일부 테스트를 포함합니다.

  • 프로젝트에서 MSTest 기반 테스트를 사용하는 경우 Microsoft.VisualStudio.QualityTools.UnitTestFramework대한 참조를 제거하고 최신 MSTest NuGet 패키지, MSTest.TestAdapter(최소 버전 1.1.11 필요) 및 MSTest.TestFramework(최소 버전 1.1.11 필요)에 대한 참조를 추가해야 합니다. 자세한 내용은 지원되는 테스트 프레임워크참조하세요.

  • 솔루션에서 하나 이상의 프로젝트에는 NuGet 참조 또는 xUnit, NUnit 또는 MSTest 테스트 프레임워크에 대한 직접 참조가 있어야 합니다. 이 프로젝트는 해당 Visual Studio 테스트 어댑터 NuGet 패키지도 참조해야 합니다. Visual Studio 테스트 어댑터는 .runsettings 파일을 통해 참조할 수도 있습니다. .runsettings 파일에는 다음 예제와 같은 항목이 있어야 합니다.

<RunSettings>
    <RunConfiguration>
          <TestAdaptersPaths>path-to-your-test-adapter</TestAdaptersPaths>
    </RunConfiguration>
</RunSettings>

Live Unit Testing에서 원본 생성기 프로젝트를 지원하나요?

Live Unit Testing은 계측을 사용하여 원본 생성기 프로젝트를 빌드할 수 없습니다. C# 컴파일러가 원본 생성기에 대한 어셈블리 로드를 설정하는 방법 때문에 계측을 사용하여 원본 생성기 프로젝트를 빌드하려는 시도가 Live Unit Testing 어셈블리를 로드하지 못합니다.

원본 생성기 csproj 파일에서 <ExcludeFromCodeCoverage>true</ExcludeFromCodeCoverage> 속성을 설정하여 Live Unit Testing에서 이러한 프로젝트를 빌드할 수 있습니다.

"파일 또는 어셈블리 'Microsoft.Bcl.AsyncInterfaces'를 로드할 수 없습니다." 오류를 해결하는 방법

Live Unit Testing은 성능상의 이유로 자체 프로세스 내에서 빌드를 실행합니다. 이 별도 빌드 프로세스에서 오류가 발생하는 경우 <UseInProcMSBuildNode>false</UseInProcMSBuildNode>.lutconfig 파일로 설정하여 MSBuild 프로세스에서 모든 빌드가 수행되도록 할 수 있습니다.

테스트가 실행되지 않는 이유는 무엇인가요?

  • 일반적인 문제는 모든 파일이 테스트 폴더에 복사되지 않는다는 것입니다. 일부 Live Unit Testing 테스트 종속성 항목을 csproj 파일에 추가해야 할 수 있습니다.

  • 또 다른 문제는 시간 제한입니다. Live Unit Testing은 테스트를 무기한 실행하므로 테스트가 너무 오래 실행되면 자동으로 실행을 중단합니다. 프로젝트의 마법사시간 제한을 늘릴 수 있습니다.

업그레이드 후 잘못된 적용 범위

Visual Studio 프로젝트에서 참조하는 테스트 어댑터를 지원되는 버전으로 업그레이드한 후 Live Unit Testing이 잘못된 범위를 표시하는 이유는 무엇인가요?

  • 솔루션의 여러 프로젝트가 NuGet 테스트 어댑터 패키지를 참조하는 경우 각각 지원되는 버전으로 업그레이드해야 합니다.

  • 테스트 어댑터 패키지에서 가져온 MSBuild .props 파일도 올바르게 업데이트되었는지 확인합니다. 일반적으로 다음과 같이 프로젝트 파일의 맨 위에서 찾을 수 있는 가져오기의 NuGet 패키지 버전/경로를 확인합니다.

      <Import Project="..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" />
    

빌드 사용자 지정

Live Unit Testing 빌드를 사용자 지정할 수 있나요?

솔루션에서 "일반" 비 계측 빌드에 필요하지 않은 계측(Live Unit Testing)을 위해 빌드하는 사용자 지정 단계가 필요한 경우 프로젝트에 코드를 추가하거나 BuildingForLiveUnitTesting 속성을 확인하고 사용자 지정 빌드 전/후 단계를 수행하는 파일을 .targets를 수 있습니다. 특정 빌드 단계(예: 패키지 게시 또는 생성)를 제거하거나 이 프로젝트 속성을 기반으로 하는 Live Unit Testing 빌드에 빌드 단계(예: 필수 구성 요소 복사)를 추가할 수도 있습니다. 이 속성을 기반으로 빌드를 사용자 지정해도 일반 빌드는 변경되지 않으며 Live Unit Testing 빌드에만 영향을 줍니다.

예를 들어 일반 빌드 중에 NuGet 패키지를 생성하는 대상이 있을 수 있습니다. 편집할 때마다 NuGet 패키지가 생성되지 않도록 할 수 있습니다. 따라서 다음과 같은 작업을 수행하여 Live Unit Testing 빌드에서 해당 대상을 사용하지 않도록 설정할 수 있습니다.

<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' != 'true'">
    <Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>

테스트 탐색기 및 라이브 단위 테스트

테스트 탐색기 창에서 테스트를 실행하는 것은 Live Unit Testing에서 테스트 실행과 어떻게 다른가요?

다음과 같은 몇 가지 차이점이 있습니다.

  • 테스트 탐색기 창에서 테스트를 실행하거나 디버깅하면 일반 이진 파일이 실행되는 반면 Live Unit Testing은 계측된 이진 파일을 실행합니다. 계측된 이진 파일을 디버그하려면 테스트 메서드에서 Debugger.Launch 메서드 호출을 추가하면 해당 메서드가 실행될 때마다(Live Unit Testing에서 실행되는 경우 포함) 디버거가 시작되고 계측된 이진 파일을 연결하고 디버그할 수 있습니다. 그러나 대부분의 사용자 시나리오에서 계측이 투명하고 계측된 이진 파일을 디버그할 필요가 없기를 바랍니다.

  • Live Unit Testing은 테스트를 실행할 새 애플리케이션 도메인을 만들지 않지만 테스트 탐색기 창에서 실행되는 테스트는 새 애플리케이션 도메인을 만듭니다.

  • Live Unit Testing은 각 테스트 어셈블리에서 순차적으로 테스트를 실행합니다. 테스트 탐색기여러 테스트를 병렬로 실행하도록 선택할 수 있습니다.

  • 테스트 탐색기 기본적으로 STA(단일 스레드 아파트)에서 테스트를 실행하는 반면 Live Unit Testing은 MTA(다중 스레드 아파트)에서 테스트를 실행합니다. Live Unit Testing의 STA에서 MSTest 테스트를 실행하려면 MSTest.STAExtensions 1.0.3-beta NuGet 패키지에서 찾을 수 있는 <STATestMethod> 또는 <STATestClass> 특성으로 테스트 메서드 또는 포함하는 클래스를 데코레이트합니다. NUnit의 경우 <RequiresThread(ApartmentState.STA)> 특성으로 테스트 메서드를 데코레이트하고 xUnit의 경우 <STAFact> 특성을 사용합니다.

테스트 제외

Live Unit Testing 참여에서 테스트를 제외하려면 어떻게 해야 하나요?

사용자별 설정은 Visual Studio Live Unit Testing 사용 문서의 "테스트 프로젝트 및 테스트 메서드 포함 및 제외" 섹션을 참조하세요. 테스트를 포함하거나 제외하는 것은 특정 편집 세션에 대해 특정 테스트 집합을 실행하거나 고유한 개인 기본 설정을 유지하려는 경우에 유용합니다.

솔루션별 설정의 경우 System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute 특성을 프로그래밍 방식으로 적용하여 메서드, 속성, 클래스 또는 구조체가 Live Unit Testing에서 계측되는 것을 제외할 수 있습니다. 또한 프로젝트 파일에서 true<ExcludeFromCodeCoverage> 속성을 설정하여 전체 프로젝트가 계측되지 않도록 할 수도 있습니다. Live Unit Testing은 계측되지 않은 테스트를 계속 실행하지만 해당 범위는 시각화되지 않습니다.

Microsoft.CodeAnalysis.LiveUnitTesting.Runtime 현재 애플리케이션 도메인에 로드되어 있는지 확인하고 이유에 따라 테스트를 사용하지 않도록 설정할 수도 있습니다. 예를 들어 xUnit을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

[ExcludeFromCodeCoverage]
public class SkipLiveFactAttribute : FactAttribute
{
   private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name ==
                                            "Microsoft.CodeAnalysis.LiveUnitTesting.Runtime");
   public override string Skip => s_lutRuntimeLoaded ? "Test excluded from Live Unit Testing" : "";
}

public class Class1
{
   [SkipLiveFact]
   public void F()
   {
      Assert.True(true);
   }
}

연속 빌드

편집하지 않더라도 Live Unit 테스트가 항상 솔루션을 계속 빌드하는 이유는 무엇인가요?

빌드 프로세스에서 솔루션 자체의 일부인 소스 코드를 생성하고 빌드 대상 파일에 적절한 입력 및 출력이 지정되지 않은 경우에도 솔루션을 빌드할 수 있습니다. MSBuild가 적절한 up-to-date 검사를 수행하고 새 빌드가 필요한지 여부를 확인할 수 있도록 대상에 입력 및 출력 목록이 제공되어야 합니다.

Live Unit Testing은 원본 파일이 변경된 것을 감지할 때마다 빌드를 시작합니다. 솔루션 빌드는 원본 파일을 생성하기 때문에 Live Unit Testing은 무한 빌드 루프에 들어갔습니다. 그러나 Live Unit Testing이 두 번째 빌드를 시작할 때(이전 빌드에서 새로 생성된 원본 파일을 검색한 후) 대상의 입력 및 출력을 검사하는 경우 입력 및 출력 검사에서 모든 항목이 -date up-to나타내기 때문에 빌드 루프가 중단됩니다.

편집기 아이콘

Live Unit Testing이 출력 창의 메시지를 기반으로 테스트를 실행하는 것처럼 보이지만 편집기에서 아이콘이 표시되지 않는 이유는 무엇인가요?

Live Unit Testing이 작동하는 어셈블리가 어떤 이유로든 계측되지 않은 경우 편집기에서 아이콘이 표시되지 않을 수 있습니다. 예를 들어 Live Unit Testing은 <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>설정한 프로젝트와 호환되지 않습니다. 이 경우 빌드 프로세스를 업데이트하여 이 설정을 제거하거나 Live Unit Testing이 작동하도록 true 변경해야 합니다. 

로그 캡처

더 자세한 로그를 수집하여 버그 보고서를 제출하려면 어떻게 해야 하나요?

몇 가지 작업을 수행하여 더 자세한 로그를 수집할 수 있습니다.

  • 도구>옵션>Live Unit Testing 이동하여 자세한 정보 표시 로깅 옵션을 변경합니다. 자세한 정보 로깅을 사용하면 출력 창에 더 자세한 로그가 표시됩니다.

  • LiveUnitTesting_BuildLog 사용자 환경 변수를 MSBuild 로그를 캡처하는 데 사용할 파일 이름으로 설정합니다. Live Unit Testing 빌드의 자세한 MSBuild 로그 메시지는 해당 파일에서 검색할 수 있습니다.

  • LiveUnitTesting_TestPlatformLog 사용자 환경 변수를 1 설정하여 테스트 플랫폼 로그를 캡처합니다. Live Unit Testing 실행의 자세한 테스트 플랫폼 로그 메시지는 [Solution Root]\.vs\[Solution Name]\log\[VisualStudio Process ID]검색할 수 있습니다.

  • VS_UTE_DIAGNOSTICS 사용자 수준 환경 변수를 만들고 1(또는 모든 값)으로 설정하고 Visual Studio를 다시 시작합니다. 이제 Visual Studio의 출력 - 테스트 탭에 많은 로깅이 표시됩니다.

작업 영역 폴더

작업 영역 폴더에서 파일을 편집할 수 있나요?

아니요, 작업 영역 폴더의 빌드 및 테스트 디렉터리에서 파일을 열거나 편집해서는 안 됩니다. Live Unit Testing은 리포지토리 루트작업 영역 루트간에 동기화를 유지하기 위해 src 폴더의 모든 파일을 관리해야 합니다.

개발 드라이브

라이브 단위 테스트는 기본 작업 영역 루트에 대한 Dev Drive를 지원하나요?

예, 하지만 사용하도록 설정되어 있는지 확인해야 합니다. Dev Drive를 사용하는 경우 프로젝션된 파일 시스템(ProjFS) 필터가 사용하도록 설정되어 있는지 확인합니다. 예를 들어 다음 명령을 사용하면 ProjFS 및 Windows Defender를 사용할 수 있습니다.

fsutil devdrv setfiltersallowed PrjFlt,WdFilter

참고 항목

  • live Unit Testing