UITest 및 Xamarin.Forms 시작

중요

Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. Visual Studio App Center가 완전히 사용 중지될 때까지 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.

지원 타임라인 및 대안에 대해 자세히 알아보세요.

Xamarin.Forms와 함께 UITest를 사용하여 수백 개의 디바이스에서 클라우드에서 실행할 UI 테스트를 작성할 수 있습니다.

개요

App Center 테스트는 개발자가 iOS 및 Android 앱에 대한 자동화된 사용자 인터페이스 테스트를 작성할 수 있게 해줍니다. 동일한 테스트 코드를 공유하는 등의 사소한 변경으로 Xamarin.UITest를 사용하여 Xamarin.Forms 앱을 테스트할 수 있습니다. 이 아티클에서는 Xamarin.UITest가 Xamarin.Forms와 함께 작동하도록 하기 위한 자세한 팁을 소개합니다.

이 가이드에서는 Xamarin.UITest에 익숙하다고 가정합니다. Xamarin.UITest에 익숙해지려면 다음 가이드를 참조하는 것이 좋습니다.

Xamarin.Forms 솔루션에 UITest 프로젝트가 추가된 후 Xamarin.Forms 애플리케이션에 대한 테스트를 작성하고 실행하는 단계는 Xamarin.Android 또는 Xamarin.iOS 애플리케이션과 동일합니다.

요구 사항

프로젝트가 자동화된 UI 테스트에 사용할 준비가 되었음을 확인하려면 Xamarin.UITest 를 참조하세요.

Xamarin.Forms 앱에 UITest 지원 추가

UITest는 화면에서 컨트롤을 활성화하고 사용자가 일반적으로 애플리케이션과 상호 작용하는 모든 위치에 입력을 제공하여 사용자 인터페이스를 자동화합니다. 단추를 누르거나입력란에 텍스트를 입력할 수 있는 테스트를 활성화하려면 테스트 코드가 화면의 컨트롤을 식별할 수 있어야 합니다.

UITest 코드가 컨트롤을 참조하려면 각 컨트롤에 고유한 ID가 필요합니다. Xamarin.Forms에서 이러한 ID를 설정할 때 권장되는 방법은 아래 표시된 것처럼 AutomationId 속성을 사용하는 것입니다.

var b = new Button {
    Text = "Click me",
    AutomationId = "MyButton"
};
var l = new Label {
    Text = "Hello, Xamarin.Forms!",
    AutomationId = "MyLabel"
};

XAML에서 AutomationId 속성을 설정할 수도 있습니다.

<Button x:Name="b" AutomationId="MyButton" Text="Click me"/>
<Label x:Name="l" AutomationId="MyLabel" Text="Hello, Xamarin.Forms!" />

참고

AutomationIdBindableProperty이므로 바인딩 식을 사용하여 설정할 수도 있습니다.

테스트에 필요한 모든 컨트롤(값을 쿼리해야 할 수 있는 단추, 텍스트 항목 및 레이블 포함)에 고유한 AutomationId를 추가해야 합니다.

경고

InvalidOperationException 속성을 두 번 이상 설정 AutomationId 하려고 하면 이 Element throw됩니다.

iOS 애플리케이션 프로젝트

iOS에서 테스트를 실행하려면 Xamarin 테스트 클라우드 에이전트 NuGet 패키지를 프로젝트에 추가해야 합니다. 추가되면 다음 코드를 메서드에 AppDelegate.FinishedLaunching 복사합니다.

#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif

Calabash 어셈블리는 공용이 아닌 Apple API를 사용하므로 App Store 앱을 거부합니다. 그러나 Xamarin.iOS 링커는 코드에서 명시적으로 참조되지 않은 경우 최종 IPA에서 Calabash 어셈블리를 제거합니다.

참고

기본적으로 릴리스 빌드에는 컴파일러 변수가 ENABLE_TEST_CLOUD 없으므로 Calabash 어셈블리가 앱 번들에서 제거됩니다. 그러나 디버그 빌드에는 기본적으로 정의된 컴파일러 지시문이 있으므로 링커가 어셈블리를 제거할 수 없습니다.

다음 스크린샷에는 디버그 빌드에 설정된 ENABLE_TEST_CLOUD 컴파일러 변수가 표시되어 있습니다.

Visual Studio 빌드 옵션의 조건부 컴파일 기호 옵션

Android 애플리케이션 프로젝트

iOS와 달리 Android 프로젝트에는 특별한 시작 코드가 필요하지 않습니다.

UITest 작성

UITest를 작성하는 방법에 대한 자세한 내용은 UITest 설명서를 참조하세요. 아래 단계는 Xamarin.Forms 데모 UsingUITest가 빌드된 방법을 자세히 설명하는 요약입니다.

Xamarin.Forms UI에서 AutomationId 사용

UITest를 작성하려면 Xamarin.Forms 애플리케이션 사용자 인터페이스가 스크립트 가능해야 합니다. 사용자 인터페이스의 모든 컨트롤에 AutomationId가 있는지 확인하세요. 그래야 테스트 코드에서 참조될 수 있습니다.

UITest에서 AutomationId 참조

UITest를 작성할 때 AutomationId 값은 각 플랫폼에서 다르게 노출됩니다.

  • iOSid 필드를 사용합니다.
  • Androidlabel 필드를 사용합니다.

iOS와 Android 모두에서 AutomationId를 찾는 플랫폼 간 UITest를 작성하려면 Marked 테스트 쿼리를 사용합니다.

app.Query(c=>c.Marked("MyButton"))

더 짧은 형식인 app.Query("MyButton")도 작동합니다.

기존 솔루션에 UITest 프로젝트 추가

Visual Studio에는 기존 Xamarin.Forms 솔루션에 Xamarin.UITest 프로젝트를 추가하는 데 사용할 수 있는 템플릿이 있습니다.

  1. 솔루션을 마우스 오른쪽 단추로 클릭하고 파일 > 새 프로젝트를 선택합니다.

  2. Visual C# 템플릿에서 테스트 범주를 선택합니다. UI 테스트 앱 > 플랫폼 간 템플릿을 선택합니다.

    새 프로젝트 추가 새

    이 단계에서는 NUnit, Xamarin.UITestNUnitTestAdapter NuGet 패키지를 사용하여 새 프로젝트를 솔루션에 추가합니다.

    NuGet 패키지 관리자

    NUnitTestAdapter는 Visual Studio에서 Visual Studio에서 NUnit 테스트를 실행할 수 있는 타사 테스트 실행기입니다.

    또한 새 프로젝트에 두 개의 클래스가 포함되어 있습니다. AppInitializer에는 테스트를 초기화하고 설정하는 데 도움이 되는 코드가 포함되어 있습니다. 다른 클래스 Tests에는 UITest를 시작하는 데 도움이 되는 상용구 코드가 포함되어 있습니다.

  3. UITest 프로젝트에서 Xamarin.Android 프로젝트로 프로젝트 참조를 추가합니다.

    프로젝트 참조 관리자

    이 단계를 통해 NUnitTestAdapter 는 Visual Studio에서 Android 앱에 대한 UITests를 실행할 수 있습니다.

Xamarin.Forms 솔루션에 Xamarin.UITest를 추가한 후에는 UITest를 만들고, 로컬로 실행하고, App Center 테스트에 제출할 수 있습니다.

요약

Xamarin.Forms 애플리케이션은 AutomationId를 테스트 자동화에 대한 고유한 보기 식별자로 공개하는 간단한 메커니즘을 사용하는 Xamarin.UITest를 통해 쉽게 테스트할 수 있습니다. Xamarin.Forms 솔루션에 UITest 프로젝트가 추가된 후 Xamarin.Forms 애플리케이션에 대한 테스트를 작성하고 실행하는 단계는 Xamarin.Android 또는 Xamarin.iOS 애플리케이션과 동일합니다.

App Center 테스트에 테스트를 제출하는 방법에 대한 자세한 내용은 Xamarin.Android용 UITests 제출 또는 Xamarin.iOS에 대한 UITest 제출을 참조하세요. UITest에 대한 자세한 내용은 App Center Test 설명서를 참조하세요.