Android NUnit 테스트 프로젝트를 자동화하려면 어떻게 할까요?

참고 항목

이 가이드에서는 Xamarin.UITest 프로젝트가 아닌 Android NUnit 테스트 프로젝트를 자동화하는 방법을 설명합니다. Xamarin.UITest 정보는 여기에서 찾을 수 있습니다.

Visual Studio에서 단위 테스트 앱(Android) 프로젝트(또는 Mac용 Visual Studio에서 Android 단위 테스트 프로젝트)를 만들 때 이 프로젝트는 기본적으로 테스트를 자동으로 실행하지 않습니다. 대상 디바이스에서 NUnit 테스트를 실행하려면 다음 명령을 사용하여 시작되는 Android.App.Instrumentation 서브클래스를 만들 수 있습니다.

adb shell am instrument

다음 단계에서는 이 프로세스를 설명합니다.

  1. TestInstrumentation.cs라는 새 파일을 만듭니다.

    using System;
    using System.Reflection;
    using Android.App;
    using Android.Content;
    using Android.Runtime;
    using Xamarin.Android.NUnitLite;
    
    namespace App.Tests {
    
        [Instrumentation(Name="app.tests.TestInstrumentation")]
        public class TestInstrumentation : TestSuiteInstrumentation {
    
            public TestInstrumentation (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer)
            {
            }
    
            protected override void AddTests ()
            {
                AddTest (Assembly.GetExecutingAssembly ());
            }
        }
    }
    

    이 파일에서 Xamarin.Android.NUnitLite.TestSuiteInstrumentation(Xamarin.Android.NUnitLite.dll부터)은 서브클래싱되어 TestInstrumentation을 만듭니다.

  2. TestInstrumentation 생성자 및 AddTests 메서드를 구현합니다. AddTests 메서드는 실제로 실행되는 테스트를 제어합니다.

  3. .csproj 파일을 수정하여 TestInstrumentation.cs를 추가합니다. 예시:

    <?xml version="1.0" encoding="utf-8"?>
    <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        ...
        <ItemGroup>
            <Compile Include="TestInstrumentation.cs" />
        </ItemGroup>
        <Target Name="RunTests" DependsOnTargets="_ValidateAndroidPackageProperties">
            <Exec Command="&quot;$(_AndroidPlatformToolsDirectory)adb&quot; $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" />
        </Target>
        ...
    </Project>
    
  4. 디버그 또는 릴리스 모드로 애플리케이션을 배포하고 다음 중지합니다.

  5. 다음 명령을 사용하여 단위 테스트를 실행합니다. PACKAGE_NAME을 앱의 패키지 이름으로 바꿉니다(패키지 이름은 AndroidManifest .xml에 있는 앱의 /manifest/@package 특성에서 찾을 수 있음).

    adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
    
  6. 필요에 따라 .csproj 파일을 수정하여 RunTests MSBuild 대상을 추가할 수 있습니다. 이렇게 하면 다음과 같은 명령을 사용하여 단위 테스트를 호출할 수 있습니다.

    msbuild /t:RunTests Project.csproj
    

    (이 새 대상을 사용할 필요가 없습니다. msbuild 대신 이전 adb 명령을 사용할 수 있습니다.)

adb shell am instrument 명령을 사용하여 단위 테스트를 실행하는 방법에 대한 자세한 내용은 Android Developer ADB를 사용하여 테스트 실행 항목을 참조하세요.

참고 항목

Xamarin Android 5.0 릴리스에서 Android Callable Wrappers의 기본 패키지 이름은 내보낼 형식의 정규화된 어셈블리 이름의 MD5SUM을 기반으로 합니다. 이렇게 하면 서로 다른 두 개의 어셈블리에서 동일한 정규화된 이름을 제공할 수 있으며, 패키징 오류가 발생하지 않습니다. 따라서 Instrumentation 특성의 Name 속성을 사용하여 읽을 수 있는 ACW/클래스 이름을 생성해야 합니다.

위의 adb 명령에서 ACW 이름을 사용해야 합니다. 따라서 C# 클래스의 이름을 바꾸거나 리팩터링하려면 올바른 ACW 이름을 사용하도록 RunTests 명령을 수정해야 합니다.