안녕하세요, .NET 개발자 여러분! **Microsoft Testing Platform (MTP)**과 **.NET 10**으로 테스트 게임을 한 단계 업그레이드할 준비가 되셨나요? 기존 VSTest 러너와 함께 dotnet test
를 사용해 오셨다면, **MTP**가 테스트를 더 부드럽고, 빠르고, 유연하게 만들어 줄 것입니다. 이 대화형 가이드에서는 **MTP**, 즉 **MicrosoftTestingPlatform**이 무엇인지, 왜 VSTest보다 한 단계 발전했는지, 그리고 **.NET 10**에서 dotnet test
와 함께 이를 활용하여 프로젝트를 위한 견고한 테스트를 구축하는 방법을 살펴보겠습니다. 기본 MSTest 프로젝트부터 독립 실행형 실행 파일이 포함된 다중 프로젝트 솔루션에 이르기까지, 제가 이 설정을 실험하기 위해 거쳤던 단계를 안내해 드릴 것입니다. **MTP, MicrosoftTestingPlatform, .NET 10, dotnet test**의 세계로 뛰어들어 테스트를 더 쉽고 즐겁게 만들어 봅시다!
개발팀이 최대의 생산성으로 함께 작업할 수 있는 통합된 올인원 플랫폼을 원하십니까?
Apidog는 귀하의 모든 요구 사항을 충족하며, Postman을 훨씬 더 저렴한 가격으로 대체합니다!
.NET 개발에서 테스트가 왜 중요한가요?
본격적으로 시작하기 전에, 테스트가 왜 중요한지 이야기해 봅시다. 작은 앱을 만들든 거대한 엔터프라이즈 시스템을 구축하든, 테스트는 코드가 예상대로 작동하는지 확인하고, 버그를 조기에 발견하며, 밤샘 디버깅 세션에서 여러분을 구해줍니다. **MSTest**와 **MTP**로 만들 자동화된 단위 테스트는 기능을 검증하고, 코드 품질을 향상시키며, 리팩토링을 쉽게 만듭니다. **.NET 10**의 성능 향상과 **MTP**의 현대적인 테스트 프레임워크를 통해 빠르고 안정적이며 CI/CD 파이프라인에 쉽게 통합할 수 있는 테스트를 작성할 수 있습니다. 어떻게 하는지 볼 준비가 되셨나요? 제 여정을 따라가 봅시다!
Microsoft Testing Platform (MTP)이란 무엇인가요?
**Microsoft Testing Platform (MTP)**, 또는 **MicrosoftTestingPlatform**은 노후화된 VSTest 러너를 대체하기 위해 도입된 Microsoft의 차세대 테스트 프레임워크입니다. 복잡한 어댑터와 DLL 기반 실행에 의존하는 VSTest와 달리, **MTP**는 .NET에서 테스트를 실행하기 위한 간소화된 네이티브 경험을 제공합니다. **.NET 10**에 내장되어 있어 독립 실행형 실행 파일 테스트 러너 및 dotnet test
와의 더 나은 통합과 같은 기능을 통해 더 빠르고 유연합니다. **MTP**는 MSTest, NUnit, xUnit을 지원하며, CI/CD 및 크로스 플랫폼 개발을 포함한 현대적인 워크플로우를 위해 설계되었습니다. **.NET 10**의 성능 향상에 최적화된 VSTest의 더 멋지고 효율적인 형제라고 생각할 수 있습니다.
1단계: MTP를 사용하여 기본 MSTest 프로젝트 설정하기
**MTP**가 작동하는 모습을 보기 위해 간단한 MSTest 프로젝트를 생성하는 것으로 시작해 봅시다. 제가 시작했던 방법은 다음과 같습니다:
**프로젝트 생성**:
- 터미널을 열고 .NET CLI를 사용하여 새 MSTest 프로젝트를 스캐폴드합니다:
dotnet new mstest -n MyMtpTests
- 이렇게 하면 기본 테스트 파일(
UnitTest1.cs
)과.csproj
파일이 포함된MyMtpTests
프로젝트 폴더가 생성됩니다.
**프로젝트 파일 확인**:
- 생성된
MyMtpTests.csproj
는 다음과 같습니다:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
</ItemGroup>
</Project>
- 이것은 코드 커버리지를 위한 **Coverlet**과 테스트 실행을 위한 **Microsoft.NET.Test.Sdk**를 사용하여 VSTest와 함께 표준 MSTest 프로젝트를 설정합니다.
**테스트 실행**:
- 프로젝트 폴더로 이동합니다:
cd MyMtpTests
- 기본 테스트를 실행합니다:
dotnet test
- VSTest 러너가
UnitTest1.cs
의 샘플 테스트를 실행하며, 테스트가 통과했음을 확인하는 출력과 Coverlet의 커버리지 통계를 볼 수 있습니다.

**무슨 일인가요?** 이것은 VSTest를 사용하는 전통적인 설정이지만, **MTP**로 업그레이드하기 전의 견고한 기준점입니다. 프로젝트는 DLL로 테스트를 실행하는데, 이는 괜찮지만 **MTP**의 실행 파일 접근 방식만큼 유연하지는 않습니다.
2단계: MTP 실행 파일 기반 테스트 러너로 발전시키기
이제 dotnet test
없이도 테스트를 실행할 수 있는 **MTP**의 독립 실행형 실행 파일 러너로 전환하여 더 흥미롭게 만들어 봅시다. 제가 했던 방법은 다음과 같습니다:
**프로젝트 파일 업데이트**:
MyMtpTests.csproj
를 수정하여 **MTP**를 활성화하고 실행 파일을 생성합니다:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<!-- Enable MTP runner and executable output -->
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
</ItemGroup>
<ItemGroup>
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
</Project>
**주요 변경 사항:**
<EnableMSTestRunner>true</EnableMSTestRunner>
: **MTP**의 테스트 러너를 활성화합니다.<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
:dotnet test
와의 호환성을 보장합니다.<OutputType>Exe</OutputType>
: DLL 대신 독립 실행형 실행 파일을 출력합니다.
**프로젝트 빌드**:
- 실행:
dotnet build
- 이렇게 하면
bin/Debug/net8.0
폴더에 실행 파일(예:MyMtpTests.exe
)이 생성됩니다.

**실행 파일 실행**:
- 출력 디렉터리로 이동합니다:
cd bin/Debug/net8.0
- 실행 파일을 실행합니다:
- **Windows**:
MyMtpTests.exe
- **macOS/Linux**:
./MyMtpTests
- 테스트는 독립 실행형 콘솔 앱으로 실행되며,
dotnet test
가 필요 없습니다!

**이것이 최고인 이유**: 실행 파일 접근 방식은 사용자 지정 CI/CD 설정이나 .NET SDK가 설치되지 않은 환경에 완벽합니다. 유연성을 위한 혁신적인 변화이며, **MTP**는 오버헤드를 줄여 VSTest보다 빠르게 만듭니다.
3단계: .NET 10 및 다중 프로젝트 테스트로 전문가 되기
실제 시나리오에서 **MTP**와 **.NET 10**이 빛을 발하는 것을 보기 위해, 클래스 라이브러리와 테스트를 포함하는 다중 프로젝트 솔루션을 구축해 봅시다. 제가 설정한 방법은 다음과 같습니다:
**최종 프로젝트 구조**:
MyMtpSolution/
│
├── MyLibrary/
│ ├── Calculator.cs
│ └── MyLibrary.csproj
│
├── MyLibrary.Tests/
│ ├── CalculatorTests.cs
│ └── MyLibrary.Tests.csproj
│
├── MyMtpSolution.sln
└── dotnet.config
1. 솔루션 생성:
- 새 솔루션으로 시작:
dotnet new sln -n MyMtpSolution
2. 클래스 라이브러리 생성:
- 클래스 라이브러리 프로젝트 추가:
dotnet new classlib -n MyLibrary
MyLibrary/Calculator.cs
에Calculator
클래스 구현:
namespace MyLibrary
{
public class Calculator
{
public int Add(int a, int b) => a + b;
public int Subtract(int a, int b) => a - b;
public int Multiply(int a, int b) => a * b;
public int Divide(int a, int b) =>
b == 0 ? throw new ArgumentException("Cannot divide by zero.") : a / b;
}
}
3. 테스트 프로젝트 생성:
- MSTest 프로젝트 스캐폴드:
dotnet new mstest -n MyLibrary.Tests
MyLibrary.Tests/UnitTest1.cs
에 테스트 추가:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyLibrary;
namespace MyLibrary.Tests
{
[TestClass]
public class CalculatorTests
{
private Calculator _calculator;
[TestInitialize]
public void Setup()
{
_calculator = new Calculator();
}
[TestMethod]
public void Add_ReturnsCorrectSum()
{
Assert.AreEqual(5, _calculator.Add(2, 3));
}
[TestMethod]
public void Subtract_ReturnsCorrectDifference()
{
Assert.AreEqual(1, _calculator.Subtract(3, 2));
}
[TestMethod]
public void Multiply_ReturnsCorrectProduct()
{
Assert.AreEqual(6, _calculator.Multiply(2, 3));
}
[TestMethod]
public void Divide_ReturnsCorrectQuotient()
{
Assert.AreEqual(2, _calculator.Divide(6, 3));
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Divide_ByZero_ThrowsException()
{
_calculator.Divide(6, 0);
}
}
}
4. 프로젝트 참조 추가:
- 테스트 프로젝트를 라이브러리에 연결:
dotnet add MyLibrary.Tests reference MyLibrary
5. 솔루션에 프로젝트 추가:
- 두 프로젝트를 솔루션에 포함:
dotnet sln MyMtpSolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MyMtpSolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj
6. MTP 구성:
MyLibrary.Tests.csproj
를 업데이트하여 **MTP** 활성화:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
</ItemGroup>
<ItemGroup>
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
</Project>
- 선택적으로, 일관성을 위해
MyLibrary.csproj
를 업데이트합니다 (필수는 아님):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
7. .NET 10으로 업그레이드:
- dotnet.microsoft.com에서 **.NET 10 SDK**를 다운로드합니다 (운영 체제—Windows, macOS, 또는 Linux와 호환되는지 확인하세요).

- 두
.csproj
파일을 **.NET 10**을 대상으로 하도록 업데이트합니다:
<TargetFramework>net10.0</TargetFramework>
8. dotnet.config 파일 생성:
- 솔루션 루트에 다음 내용으로
dotnet.config
를 생성합니다:
[dotnet.test.runner]
name = "Microsoft.Testing.Platform"
- 이렇게 하면 **.NET 10**에서
dotnet test
와 **MTP**의 네이티브 통합이 활성화됩니다.
9. 테스트 빌드 및 실행:
- 솔루션 루트에서:
dotnet test
- **MTP**는 **.NET 10**의 최적화를 활용하여 테스트를 실행합니다. 통과/실패 및 커버리지 통계를 포함한 모든 테스트에 대한 출력을 볼 수 있습니다.

**이것이 놀라운 이유**: **.NET 10**은 성능 향상(더 빠른 JIT, 더 나은 메모리 관리)을 가져오고, **MTP**의 네이티브 통합은 VSTest의 레거시 브릿지를 제거하여 테스트를 더 빠르고 안정적으로 만듭니다. 다중 프로젝트 설정은 라이브러리와 별도의 테스트 프로젝트를 사용하여 실제 앱을 모방합니다.
.NET 10과 MTP가 테스트를 개선하는 방법
**MTP**와 **.NET 10**은 테스트를 다음 단계로 끌어올립니다:
- **속도**: **MTP**의 네이티브 러너는 **.NET 10**에 최적화되어 VSTest에 비해 시작 시간을 단축합니다.
- **유연성**: 독립 실행형 실행 파일은 테스트를 이식 가능하게 만들어 사용자 지정 CI/CD 또는 컨테이너화된 환경에 이상적입니다.
- **확장성**: 다중 프로젝트 지원은 복잡한 솔루션을 처리하며, **MTP**는 일관된 테스트 실행을 보장합니다.
- **현대적인 기능**: **.NET 10**의 AOT 컴파일 및 메모리 최적화는 테스트를 더 빠르게 실행하며, **MTP**는 병렬 테스트 실행 및 사용자 지정 리포터와 같은 고급 기능을 지원합니다.
사용자들은 **MTP**에 대해 열광하고 있습니다: "마치 VSTest 같지만, 불필요한 부분이 없고 더 빠르고 깔끔해요!" **.NET 10**으로 최첨단 성능을 얻을 수 있으며, **MTP**는 dotnet test
를 즐겁게 만듭니다.
문제 해결 팁
- **테스트가 실행되지 않나요?** **.NET 10 SDK**가 설치되어 있고
TargetFramework
가net10.0
으로 설정되어 있는지 확인하세요. - **MTP가 활성화되지 않았나요?**
.csproj
또는dotnet.config
에EnableMSTestRunner
와TestingPlatformDotnetTestSupport
가 있는지 확인하세요. - **커버리지가 누락되었나요?**
coverlet.collector
가 포함되어 있는지 확인하고dotnet test --collect:"XPlat Code Coverage"
를 실행하세요. - **실행 파일이 실패하나요?**
OutputType
이Exe
인지 확인하고.exe
를 실행하기 전에dotnet build
를 실행하세요.
결론
이제 **MTP (MicrosoftTestingPlatform), .NET 10, dotnet test**를 사용하여 현대적인 테스트 설정을 구축하는 전문가가 되셨습니다! 기본 MSTest 프로젝트부터 독립 실행형 실행 파일이 포함된 다중 프로젝트 솔루션에 이르기까지, **MTP**가 VSTest를 어떻게 능가하는지, 그리고 **.NET 10**이 성능을 어떻게 향상시키는지 확인했습니다. 더 많은 테스트를 추가하거나, CI/CD 파이프라인에 통합하거나, 병렬 실행과 같은 **MTP**의 고급 기능을 탐색해 보세요. 멋진 테스트 설정이 있으신가요? 공유해 주세요—테스트의 활기를 계속 이어갑시다!