이 항목에서는 Windows App SDKWinUI 3 UI(사용자 인터페이스) 기능을 사용하여 만든 앱에서 기능을 테스트하고 유효성을 검사하는 방법에 대한 몇 가지 권장 사항을 제공합니다. 테스트는 앱 개발 프로세스의 필수적인 부분입니다. 이는 버그를 조기에 파악하고, 코드 품질을 유지하며, 앱이 발전함에 따라 안정적인 사용자 환경을 보장하는 데 도움이 됩니다. 단위 테스트를 워크플로에 통합하면 코드를 자신 있게 리팩터링하고, 새 기능을 추가하고, 기존 기능이 예상대로 계속 작동한다는 것을 알고 업데이트를 제공할 수 있습니다.
자습서: WinUI 3 단위 테스트 프로젝트를 만듭니다.
Microsoft.UI.Xaml 네임스페이스 아래의 대부분의 개체 형식은 XAML 애플리케이션 프로세스의 UI 스레드에서 사용해야 합니다. (WinUI 3을 사용하지 않는 Windows App SDK 사용하여 만든 앱 테스트에 대한 자세한 내용은 다음 섹션인 을 참조하세요.
메모
기본 앱 프로젝트에서 끌어와 라이브러리 프로젝트에 배치하여 테스트할 코드를 리팩터링하는 것이 좋습니다. 그러면 앱 프로젝트 및 단위 테스트 프로젝트 모두 해당 라이브러리 프로젝트를 참조할 수 있습니다. 이 섹션에서는 기본 제공 단위 테스트 프로젝트 템플릿을 사용하여 Visual Studio WinUI 3 앱에 대한 단위 테스트를 만드는 방법을 설명합니다.
메모
여기에 설명된 단위 테스트 앱은 WinUI 3 애플리케이션의 컨텍스트에서 작성됩니다. 이는 XAML 런타임이 필요한 코드를 실행하는 모든 테스트에 필요합니다. 이 프로젝트는 XAML UI 스레드를 만들고 테스트를 실행합니다.
이 튜토리얼에서는 다음을 배우게 됩니다:
- Visual Studio WinUI 단위 테스트 앱 프로젝트를 만듭니다.
- Visual Studio Test Explorer 사용합니다.
- 테스트를 위해 WinUI 클래스 라이브러리 프로젝트를 추가합니다.
- Visual Studio 테스트 탐색기를 사용하여 테스트를 실행합니다.
사전 요구 사항
WinUI 개발을 위한 Visual Studio 설치 및 설정이 있어야 합니다. 빠른 시작: 환경 설정 및 WinUI 3 프로젝트 만들기를 참조하세요.
WinUI 단위 테스트 앱 프로젝트 만들기
시작하려면 단위 테스트 프로젝트를 만듭니다. 프로젝트 형식은 필요한 모든 템플릿 파일과 함께 제공됩니다.
Visual Studio 열고 시작 창에서 새 프로젝트 만들기를 선택합니다.
새 프로젝트 만들기 창에서 프로젝트를 C#로 필터링합니다. Windows 및 WinUIWinUI 단위 테스트 앱 템플릿을 선택한 다음, Next를 선택합니다>
[선택 사항] 새 프로젝트 구성 창에서 프로젝트 이름, 솔루션 이름(솔루션 및 프로젝트를 동일한 디렉터리에 배치 체크 해제) 및 프로젝트 경로를 변경합니다.
선택하고생성합니다.
테스트 탐색기를 사용하여 테스트 실행
테스트 프로젝트를 만들 때 테스트 탐색기에 테스트가 표시되며 이는 단위 테스트를 실행하는 데 사용됩니다. 테스트를 범주로 그룹화하고, 테스트 목록을 필터링하고, 테스트 재생 목록을 만들고, 저장하고, 실행하고, 단위 테스트를 디버그하고( Visual Studio Enterprise에서) 코드 검사를 분석할 수도 있습니다.
UnitTests.cs 파일에는 테스트 탐색기에서 사용하는 단위 테스트에 대한 소스 코드가 포함됩니다. 기본적으로 여기에 표시된 기본 샘플 테스트는 자동으로 생성됩니다.
namespace WinUITest1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual(0, 0);
}
// Use the UITestMethod attribute for tests that need to run on the UI thread.
[UITestMethod]
public void TestMethod2()
{
var grid = new Grid();
Assert.AreEqual(0, grid.MinWidth);
}
}
}
아직 하지 않았다면 솔루션을 구축하세요. 이렇게 하면 Visual Studio 사용 가능한 모든 테스트를 "검색"할 수 있습니다.
테스트 탐색기를 엽니다. 표시되지 않으면 테스트 메뉴를 열고 테스트 탐색기를 선택하거나 Ctrl + E, T를 누릅니다.
테스트를 봅니다. 테스트 탐색기 창에서 모든 노드를 확장합니다(이 시점에서 샘플 테스트만 표시됨).
테스트를 실행합니다.
- 개별 테스트 노드를 마우스 오른쪽 버튼으로 클릭하고 실행을 선택합니다.
- 테스트를 선택하고 재생 버튼을 누르거나 Ctrl + R, T를 누릅니다.
- 보기에서 모든 테스트 실행 버튼을 누르거나 Ctrl+ R, V를 누릅니다.
결과를 검토합니다. 테스트가 완료되면 결과가 테스트 탐색기 창에 표시됩니다.
테스트를 위한 클래스 라이브러리 프로젝트 추가
단위 테스트 솔루션에 새 프로젝트를 추가합니다. Solution Explorer 솔루션을 마우스 오른쪽 단추로 클릭하고 AD -> 새 프로젝트...를 선택합니다. .
이 예제에서는 WinUI 3 클래스 라이브러리 프로젝트를 추가합니다. 새 프로젝트 창에서 C#/Windows/WinUI를 필터링하고 WinUI 클래스 라이브러리 선택합니다.
다음을 선택하고 프로젝트의 이름을 입력하고(이 예제에서는 사용
WinUIClassLibrary1) Create 키를 누릅니다.Solution Explorer에서 강조된 새 'WinUI 클래스 라이브러리' 프로젝트의 스크린샷 및 코드 편집기에서 열려 있는 Class1.cs 파일. 프로젝트에 새
UserControl항목을 추가합니다. Solution Explorer 방금 추가한 WinUI 3 클래스 라이브러리 프로젝트를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 AD -> 새 항목을 선택합니다.
새 항목 추가 창의 설치된 항목 목록에서 WinUI 노드를 선택한 다음, 결과에서 사용자 컨트롤을 선택합니다. 컨트롤
UserControl1이름을 지정합니다.Visual Studio에서 강조 표시된 WinUI/사용자 컨트롤(WinUI)의 새 항목 추가 창 스크린샷 UserControl1.xaml.cs code-behind 파일을 엽니다. 이 예제에서는 정수를 반환하는 새
GetSevenpublic 메서드를 추가합니다.namespace WinUICLassLibrary1 { public sealed partial class UserControll : UserControl { public UserControl1() { this.InitializeComponent(); } public int GetSeven() { return 7; } } }WinUI 3 클래스 라이브러리 프로젝트를 단위 테스트 프로젝트의 종속성으로 설정하여 WinUI 3 클래스 라이브러리 프로젝트에서 형식을 사용할 수 있도록 합니다. Solution Explorer 클래스 라이브러리 프로젝트에서 구성을 마우스 오른쪽 단추로 클릭하고 프로젝트 참조 추가를 선택합니다.
WinUIClassLibrary1프로젝트 목록에서 항목을 선택합니다.
UnitTests.cs에서 새 테스트 메서드를 만듭니다. 이 테스트 사례에서는 XAML UI 스레드를 실행해야 하므로 표준
[UITestMethod]특성 대신 특성으로[TestMethod]표시합니다.[UITestMethod] public void TestUserControl1() { WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1(); Assert.AreEqual(7, userControl1.GetSeven()); }이제 이 새 테스트 메서드가 테스트 탐색기에 단위 테스트 중 하나로 표시됩니다.
Visual Studio 테스트 탐색기 창의 스크린샷으로, 기본 샘플 테스트와 새 단위 테스트를 보여 줍니다. 테스트를 실행합니다.
- 새 테스트 노드를 마우스 오른쪽 버튼으로 클릭하고 실행을 선택합니다.
- 새 테스트를 선택하고 재생 버튼을 누르거나 Ctrl + R, T를 누릅니다.
- 보기에서 모든 테스트 실행 버튼을 누르거나 Ctrl+ R, V를 누릅니다.
비 WinUI 기능 테스트
대부분의 경우 앱에는 Microsoft.UI.Xaml 형식에 의존하지 않지만 테스트가 여전히 필요한 기능이 포함되어 있습니다. MSTest, NUnit 및 xUnit 등 다양한 도구를 사용하여 .NET 코드를 테스트할 수 있습니다. .NET 앱 테스트에 대한 자세한 내용은 .NET에서 테스트를 참고하세요.
Visual Studio에서 솔루션 탐색기에서 솔루션을 마우스 오른쪽 버튼으로 클릭하여 이러한 테스트 도구에 대한 새 프로젝트를 만들 수 있습니다. 상황에 맞는 메뉴에서 새 프로젝트 추가>를 선택하고 모든 언어 선택기에서 C#, Windows, 모든 언어 선택기에서 Test, 모든 프로젝트 형식 선택기에서 적절한 테스트 도구(MSTest 테스트 프로젝트, NUnit 테스트 프로젝트 또는 xUnit 테스트 프로젝트)를 선택합니다.
WinUI 3 프로젝트를 참조하는 새 MSTest, NUnit 또는 xUnit 프로젝트를 만들 때 다음을 수행해야 합니다.
테스트 프로젝트의 .csproj 파일에서
TargetFramework을(를) 업데이트합니다. 이 값은TargetFrameworkWinUI 3 프로젝트의 값과 일치해야 합니다. 기본적으로 MSTest, NUnit 및 xUnit 프로젝트는 .NET 지원하는 플랫폼의 전체 범위를 대상으로 하지만 WinUI 3 프로젝트는 Windows 지원하며 보다 구체적인 TargetFramework가 있습니다.예를 들어 .NET 8을 대상으로 하는 경우 단위 테스트 프로젝트의 TargetFramework를
<TargetFramework>net8.0</TargetFramework>에서<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>업데이트합니다.테스트 프로젝트에서 RuntimeIdentifiers를 업데이트합니다.
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) >= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers><RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) < 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>테스트 프로젝트의 .csproj 파일에서
PropertyGroup다음 속성을 추가하여 테스트가 Windows App SDK 런타임을 로드하는지 확인합니다.<WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>테스트를 실행하는 컴퓨터에 Windows App SDK 런타임이 설치되어 있는지 확인합니다. Windows App SDK 배포에 대한 자세한 정보를 보려면, 외부 위치(또는 패키징되지 않은)와 함께 패키징된 프레임워크 종속 앱용 Windows App SDK 배포 가이드를 참조하세요.
추가 리소스
Windows developer