다음을 통해 공유


MSTest v3 마이그레이션 가이드

이 가이드는 사용자가 MSTest 프로젝트를 MSTest v1에서 MSTest v3으로 업그레이드하는 데 도움이 됩니다. MSTest v3에는 최신 .NET 프레임워크와의 테스트 안정성, 실행 속도 및 호환성을 개선하기 위해 중요한 새로운 기능, 최적화 및 일부 주요 변경 내용이 도입되었습니다.

영향을 받는 사람은 누구입니까?

이 가이드는 다음 중 하나를 통해 MSTest v1을 사용하는 현재 .NET Framework 프로젝트 용입니다.

  • 어셈블리 참조: 직접 참조하는 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 프로젝트입니다.
  • NuGet 패키지: 버전 1.0.0-1.4.0에서 NuGet 패키지를 사용하는 MSTest.TestFramework 프로젝트입니다.

프로젝트가 단위 테스트를 위해 MSTest를 사용하고 위의 참조를 포함하는 경우 MSTest v3의 향상된 기능의 이점을 누릴 수 있으며 이 가이드에 설명된 조정이 필요합니다.

MSTest v3로 마이그레이션하는 이유는 무엇인가요?

현재 MSTest 설정에 만족하더라도 MSTest v3로 업그레이드하면 테스트의 품질과 향후 준비 상태를 모두 향상시킬 수 있는 상당한 이점이 있습니다. 이제 스위치를 만드는 것이 중요한 단계가 될 수 있는 이유는 다음과 같습니다.

  • 향상된 보안: MSTest v1에는 알려진 보안 취약성이 있습니다. MSTest v3를 사용하여 테스트 환경을 보호하기 위해 광범위한 보안 개선 사항을 구현했습니다.

  • 즉각적인 성능 향상: MSTest v3는 테스트 실행 시간을 크게 줄이고 리소스 사용량을 최적화합니다. 이는 더 빠른 테스트를 통해 배포 주기를 단축하고 인프라 비용을 절감할 수 있는 CI/CD 파이프라인에서 특히 유용합니다.

  • 미래 교정 테스트: MSTest v3은 플랫폼 간 호환성과 함께 .NET 8 및 향후 반복을 비롯한 최신 .NET 버전에 대한 강력한 지원을 제공합니다. 즉, 테스트가 더 적응 가능하고 업그레이드할 준비가 되어 있으므로 오래된 테스트 프레임워크의 기술적 문제를 방지할 수 있습니다.

  • 새 분석기를 사용하여 코드 안정성 향상: MSTest v3 기본 제공 코드 분석기는 모범 사례를 적용하여 문제를 조기에 파악하고 더 깨끗하고 유지 관리하기 쉬운 테스트 코드를 홍보합니다.

    • 사전 문제 감지: 분석기는 실시간 피드백을 제공하여 테스트를 작성할 때 개선 사항을 제안하고 잠재적인 문제에 플래그를 지정합니다.

    • 강력한 형식 안전 어설션: 모호한 오버로드를 대체하는 MSTest v3는 형식 안전 어설션을 적용하여 잘못된 테스트 동작의 위험을 줄이고 테스트를 보다 안정적으로 만듭니다.

    • 더 깨끗한 코드, 적은 유지 관리: MSTest 표준 및 모범 사례에 따라 테스트를 조정하여 MSTest v3를 사용하면 더 깨끗하고 관리하기 쉬운 코드베이스를 유지 관리하여 시간이 지남에 따라 기술적인 문제를 줄일 수 있습니다.

  • 향상된 유연성 및 확장성: MSTest v3는 동적 데이터 원본 및 어셈블리 내 병렬 실행을 비롯한 고급 테스트 시나리오를 지원합니다. 이러한 유연성을 통해 보다 정교한 테스트 방법을 사용할 수 있으며 복잡한 구성 없이 테스트 제품군의 속도를 높일 수 있습니다.

업그레이드를 통해 향후 .NET 개발에 더 빠르고 안정적이며 적응할 수 있도록 테스트를 설정하고 장기적인 성공과 보다 쉬운 유지 관리를 위해 프로젝트를 배치합니다.

마이그레이션 단계

1. 어셈블리 참조 제거

MSTest v1을 사용하여 어셈블리 참조를 사용하는 프로젝트의 경우 다음 DLL에 대한 참조가 있습니다.

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework

비 SDK 스타일 프로젝트에서 이러한 참조는 XML을 직접 편집하는 대신 Visual Studio를 통해 추가되는 경우가 많습니다. Visual Studio GUI를 사용하여 이러한 참조를 제거하려면 다음을 수행합니다.

  1. Visual Studio에서 솔루션 탐색기 엽니다.

  2. MSTest를 사용하여 프로젝트의 프로젝트 노드 를 확장합니다.

  3. 프로젝트 내에서 References 폴더를 찾습니다.

  4. References 폴더 내에서 MSTest DLL 참조를 찾아 선택합니다.Microsoft.VisualStudio.QualityTools.UnitTestFramework

  5. 선택한 참조를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 제거를 선택합니다.

    이미지

  6. 프로젝트를 저장하여 변경 내용을 적용합니다.

2. 프로젝트 업데이트

다음 두 가지 방법 중 하나로 프로젝트를 MSTest v3으로 업데이트할 수 있습니다.

  • 패키지 업데이트: MSTest.TestFrameworkMSTest.TestAdapter에 대한 NuGet 패키지 참조가 있는 경우 Visual Studio의 NuGet 패키지 관리자 사용하거나 NuGet 패키지 관리자 콘솔에서 다음 명령을 실행하여 업데이트합니다.

    Update-Package MSTest.TestFramework -Version 3.6.2
    Update-Package MSTest.TestAdapter -Version 3.6.2
    
  • 또는 MSTest 패키지 설치: Visual Studio에서 NuGet 패키지 관리자 사용하거나 NuGet 패키지 관리자 콘솔에서 다음 명령을 실행하여 최신 MSTest 패키지를 설치합니다.

    Install-Package MSTest -Version 3.6.2
    
  • 또는 SDK 스타일 프로젝트의 경우 프로젝트 파일을 직접 업데이트합니다. MSTest SDK 버전을 지정하도록 파일을 업데이트합니다 .csproj .

    <Project Sdk="MSTest.Sdk/3.6.2">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
      </PropertyGroup>
    </Project>
    

프로젝트 설정에 가장 적합한 옵션을 선택합니다. 두 방법 모두 MSTest v3를 사용하도록 프로젝트가 업그레이드되었는지 확인합니다.

3. 코드 업데이트

  • Assert.AreEqual/AreNotEqual 또는 Assert.AreSame/AreNotSame(개체 포함) 이러한 어설션 중 하나에서 오류가 발생하는 경우 비교되는 형식이 호환되는지 확인하는 것이 좋습니다. 이 경우 명시적 제네릭 입력을 추가하여 문제를 해결하는 것이 좋습니다.

  • 제네릭 사용:

    Assert.AreEqual<customObject>(expectedObject, actualObject);
    Assert.AreNotEqual<customObject>(expectedObject, actualObject);
    
  • 테스트 초기화: 비동기 초기화에 메서드를 사용합니다 TestInitialize .

  • 정리: 메서드 또는 Dispose 패턴을 사용하여 TestCleanup 정리합니다.

  • RunSettings: .testsettings 파일이 더 이상 지원되지 <LegacySettings> 않으므로 더 이상 사용할 수 없습니다. 테스트 구성에 .runsettings를 사용합니다.

MSTest v3의 새로운 기능

  • 테스트 프로젝트의 향상된 기본값
  • 간소화된 설정 및 사용
  • MSTest Runner의 향상된 확장성
  • 향상된 테스트 개발을 위한 새로운 Roslyn 기반 코드 분석기
  • WinUI 애플리케이션 지원
  • 어셈블리 내 병렬 실행
  • 데이터 기반 테스트를 위한 동적 데이터 원본

사용되지 않는 기능

  • 지원 중단:
    • .NET Framework 4.5 (.NET 4.6.2 이상 사용)
    • .NET Standard 1.0 (.NET Standard 2.0 사용)
    • 16299 이전 UWP 버전
    • 18362 이전 WinUI 버전
    • .NET 5 (.NET Core 3.1 또는 .NET 6 사용)

호환성이 손상되는 변경 및 제거된 API

어설션 오버로드

AreEqual, AreNotEqual, AreSame 또는 AreNotSame 어설션으로 인해 오류가 발생하는 경우 비교되는 형식이 호환되는지 확인하는 것이 좋습니다. 이 경우 명시적 제네릭 입력을 추가하여 문제를 해결하는 것이 좋습니다.

DataRowAttribute 업데이트

MSTest v3의 DataRowAttribute 생성자는 매개 변수에 대한 형식 일치를 적용하도록 간소화되었습니다. 즉, 메서드 매개 변수의 형식과 정확하게 일치하는 값을 DataRow에 지정해야 합니다.

예제:

[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }

형식이 정확히 일치하지 않는 경우 MSTest v3는 이제 변환을 시도하지 않고 오류를 발생합니다.

시간 제한 설정

MSTest v3에서는 다양한 .NET 환경에서 일관된 동작을 Timeout 보장하기 위해 설정 처리가 표준화되었습니다. 이러한 변경은 특정 시간 제한 값에 의존하는 테스트에 영향을 미칠 수 있으며, 특히 이러한 테스트가 비동기적이거나 다른 프레임워크에서 실행되는 경우에 영향을 미칠 수 있습니다.

  • MSTest v1 또는 v2에서 특정 시간 제한 설정은 프레임워크(예: .NET Framework 및 .NET Core)에 따라 다르게 해석되었을 수 있습니다.
  • MSTest v3는 일관된 시간 제한 동작을 적용합니다. 즉, 시간 제한 값이 새 표준에서 너무 짧은 경우 이전 버전의 시간 제한으로 구성된 테스트가 실패하거나 다르게 동작할 수 있습니다.

의미:

  • 시간 제한을 사용하는 테스트는 조정이 필요할 수 있습니다. 테스트에 특정 기간이 있는 Timeout 특성이 있는 경우 MSTest v3에서 해당 값이 여전히 테스트를 완료하도록 허용하는지 확인합니다. 이전에 특정 시간 제한으로 통과한 테스트는 새 규칙에 따라 올바르게 작동하려면 더 높거나 낮은 시간 제한 값이 필요할 수 있습니다.

  • 통합 시간 제한 처리: MSTest v3 통합 시간 제한 처리는 시간 제한을 더 예측 가능하게 만들지만 이전 테스트에서 값을 확인하고 잠재적으로 업데이트 Timeout 해야 합니다.

예제:

// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }

// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... } 

구성 변경 내용

.runsettings 파일이 MSTest v3 구문 및 구조와 일치하는지 확인합니다.

병렬 실행 및 성능 최적화

성능 향상을 위해 .runsettings에서 병렬 실행을 구성합니다 .

예제:

<RunSettings>
  <RunConfiguration>
    <MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
  </RunConfiguration>
</RunSettings>

향상된 리소스 사용량

MSTest v3는 리소스 관리를 최적화하여 메모리 사용량이 줄어들고 CPU 효율성이 향상됩니다.

사용되지 않는 특성 처리 및 사용자 지정 확장 마이그레이션

사용되지 않는 특성을 검토하고 가능한 경우 MSTest v3 대안으로 바꿉니다.

코드 분석기 및 모범 사례

MSTest v3에는 모범 사례에 대한 기본 제공 코드 분석기, 구성 문제 방지, MSTest 특성 및 설정의 적절한 사용이 포함됩니다. MSTest 패키지 또는 MSTest.Sdk를 사용하거나 MSTest Analyzer 패키지를 설치할 수 있는 경우 자동으로 사용할 수 있습니다.

추가 리소스