지원되는 프레임워크
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-미리 보기 | MSTest.TestFramework 1.0.5-미리 보기 |
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은 작동하지 않습니다. 라이브 유닛 테스트를 켜기 전에 솔루션의 명시적 빌드를 수행하거나 솔루션에서 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 패키지를 참조해야 합니다.
내 프로젝트가 빌드되지 않는 이유는 무엇인가요?
실시간 단위 테스트 드롭다운을 선택하면 빌드 오류가 출력 창에 보고됩니다. 설정 마법사에서 잘못된 구성으로 인해 라이브 유닛 테스트에서 빌드 문제가 발생할 수 있는 몇 가지 일반적인 문제가 있습니다.
작업 영역 루트 속성이 너무 길면 경로가 너무 길다는 예외로 인해 빌드가 실패할 수 있습니다.
Repository Root 속성이 저장소 루트를 가리키지 않으면 작업 영역이 잘못된 파일 집합으로 채워집니다.
git 리포지토리의 경우, Exclude files 속성은 일반적으로 gitignore 파일에 지정된 파일을 복사하지 않습니다. 그러나 무시되는 파일을 git 리포지토리에 체크인하거나 파일을 자동 생성하는 도구를 실행할 수 있지만 빌드 중에 생성되지 않을 수도 있습니다. 이러한 경우 "<Custom>" 옵션을 선택하고 아티팩트 폴더만 나열하는 사용자 지정 규칙 집합을 나열해야 합니다.
앞서 설명한 문제 외에도 다음과 같은 프로젝트 구성이 올바르게 빌드되지 않을 수 있습니다.
프로젝트 종속성을 각 프로젝트에 대해
ProjectReferences
이 아닌 전역 솔루션 구성으로 지정하면 라이브 유닛 테스트가 잘못된 프로젝트 집합을 빌드할 수 있습니다. 이 문제를 해결하려면 라이브 유닛 테스트 재생 목록에 일부 테스트를 포함하세요.1>라이브 유닛 테스트 재생 목록를 선택할 때까지 라이브 유닛 테스트는 프로젝트를 빌드하지 않습니다. 문제를 해결하려면 프로젝트 간에 명시적 참조를 추가하세요.라이브 유닛 테스트 재생 목록를 선택할 때까지 라이브 유닛 테스트는 프로젝트를 빌드하지 않습니다. 이 문제를 해결하려면 라이브 유닛 테스트 재생 목록에 일부 테스트를 포함하세요.
프로젝트에서 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>
테스트가 실행되지 않는 이유는 무엇인가요?
일반적인 문제는 모든 파일이 테스트 폴더에 복사되지 않는다는 것입니다. 일부 라이브 유닛 테스트 테스트 종속성 항목을 csproj 파일에 추가해야 할 수도 있습니다.
또 다른 문제는 시간 초과입니다. 라이브 유닛 테스트는 테스트를 무한정 실행하기 때문에 테스트가 너무 오래 실행되면 자동으로 실행을 중단합니다. 프로젝트의 마법사에서 타임아웃을 늘릴 수 있습니다.
업그레이드 후 검사가 올바르지 않음
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 빌드를 사용자 지정할 수 있나요?
솔루션에 "일반" 비계측 빌드에는 필요하지 않은 계측(라이브 유닛 테스트)을 위한 사용자 지정 단계가 필요한 경우, 프로젝트 또는 .targets 파일에 BuildingForLiveUnitTesting
속성을 확인하고 사용자 지정 사전/사후 빌드 단계를 수행하는 코드를 추가할 수 있습니다. 또한 특정 빌드 단계(예: 패키지 게시 또는 생성)을 제거하거나 빌드 단계(예: 필수 구성 요소 복사)를 이 프로젝트 속성을 기반으로 하는 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에서 테스트를 실행하는 것은 어떻게 다른가요?
다음과 같은 몇 가지 차이점이 있습니다.
테스트 탐색기 창에서 테스트를 실행 또는 디버깅하면 일반 이진 파일을 실행합니다. 반면 Live Unit Testing은 계측된 이진 파일을 실행합니다. 계측된 이진 파일을 디버그하려는 경우 테스트 메서드에서 Debugger.Launch 메서드 호출을 추가하면 해당 메서드가 실행될 때(Live Unit Testing에서 실행하는 경우 포함)마다 디버거가 시작되고 계측된 이진 파일을 연결하고 디버그할 수 있습니다. 하지만 대부분의 사용자 시나리오에서 계측이 투명하게 표시되므로 계측된 바이너리를 디버깅할 필요가 없기를 바랍니다.
Live Unit Testing은 테스트를 실행하기 위해 새 애플리케이션 도메인을 만들지 않지만 Test Explorer 창에서 실행되는 테스트는 새 애플리케이션 도메인을 만듭니다.
Live Unit Testing은 테스트 어셈블리 각각에서 순차적으로 테스트를 실행합니다. 테스트 탐색기에서 여러 테스트를 병렬로 실행하도록 선택할 수 있습니다.
테스트 탐색기는 기본적으로 STA(단일 스레드 아파트)에서 실행되는 반면 Live Unit Testing은 MTA(다중 스레드 아파트)에서 테스트를 실행합니다. Live Unit Testing의 STA에서 MSTest 테스트를 실행하려면
MSTest.STAExtensions 1.0.3-beta
에서 찾을 수 있는<STATestMethod>
또는<STATestClass>
특성을 사용하여 NuGet 패키지 테스트 메서드 또는 포함한 클래스를 데코레이트합니다. NUnit의 경우 테스트 메서드를<RequiresThread(ApartmentState.STA)>
특성을 사용하여 데코레이트하고 xUnit의 경우<STAFact>
특성을 사용하여 데코레이트합니다.
테스트 제외
Live Unit Testing에 참여하지 않도록 테스트를 제외하려면 어떻게 할까요?
사용자 지정 설정은 Visual Studio에서 Live Unit Testing 사용 문서의 "테스트 프로젝트 및 테스트 메서드 포함 및 제외" 섹션을 참조하세요. 테스트 포함 또는 제외는 특정 편집 세션에 특정 집합의 테스트를 실행하거나 고유한 개인 기본 설정을 유지하려는 경우에 유용합니다.
솔루션 지정 설정은 Live Unit Testing에서 계측한 메서드, 속성, 클래스 또는 구조를 제외하여 프로그래밍 방식으로 System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute 특성을 적용할 수 있습니다. 또한 프로젝트 파일에서 <ExcludeFromCodeCoverage>
속성을 true
로 설정하여 전체 프로젝트를 계측하지 않도록 제외할 수도 있습니다. 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 Testing에서 내 솔루션을 계속 빌드하는 이유는 무엇인가요?
빌드 프로세스가 솔루션 자체의 일부인 소스 코드를 생성하고 빌드 대상 파일에 적절한 입력 및 출력이 지정되지 않은 경우 편집하지 않더라도 솔루션을 빌드할 수 있습니다. 대상에는 입력 및 출력의 목록이 지정되었으므로 MSBuild는 적절한 최신 검사를 수행하고 새 빌드가 필요한지 여부를 확인할 수 있습니다.
Live Unit Testing은 원본 파일이 변경되었음을 감지할 때마다 빌드하기 시작합니다. 솔루션의 빌드가 원본 파일을 생성하기 때문에 Live Unit Testing은 빌드 무한 루프로 진행됩니다. 그러나 (이전 빌드에서 새로 생성된 원본 파일을 감지한 후에) Live Unit Testing에서 두 번째 빌드를 시작하는 시기를 대상의 입력 및 출력이 확인하면 입력 및 출력 검사는 모든 항목이 최신 상태라고 표시하기 때문에 빌드 루프를 중단시킵니다.
편집기 아이콘
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의 출력 - 테스트 탭에서 여러 로깅이 표시됩니다.
작업 영역 폴더
워크스페이스 폴더 아래의 파일을 편집할 수 있나요?
아니요, 워크스페이스 폴더의 빌드 및 테스트 디렉터리에서 파일을 열거나 편집해서는 안 됩니다. 라이브 유닛 테스트는 src 폴더의 모든 파일을 관리하여 리포지토리 루트와 작업 공간 루트 간에 동기화 상태를 유지해야 합니다.
개발 드라이브
라이브 유닛 테스트가 기본 워크스페이스 루트에 대해 개발자 드라이브를 지원하나요?
예, 하지만 활성화되어 있는지 확인해야 합니다. 개발 드라이브를 사용하는 경우 프로젝트 파일 시스템(ProjFS) 필터가 활성화되어 있는지 확인하세요. 예를 들어, 다음 명령은 ProjFS 및 Windows Defender를 활성화합니다:
fsutil devdrv setfiltersallowed PrjFlt, WdFilter