Share via


Android NUnit テスト プロジェクトを自動化する方法を教えてください

Note

このガイドでは、Xamarin.UITest プロジェクトではなく、Android NUnit テスト プロジェクトを自動化する方法について説明します。 Xamarin.UITest の詳細については、こちらを参照してください。

Visual Studio で単体テスト アプリ (Android) プロジェクト (または、Visual Studio for Mac で 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 ());
            }
        }
    }
    

    このファイルでは、TestInstrumentation を作成するために (Xamarin.Android.NUnitLite.dll から) Xamarin.Android.NUnitLite.TestSuiteInstrumentation をサブクラス化します。

  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
    

    (この新しいターゲットの使用は必須ではないことに注意してください。前の adb コマンドを msbuild の代わりに使用できます)。

adb shell am instrument コマンドを使用して単体テストを実行する方法について詳しくは、Android デベロッパーの「ADB を使用したテストの実行」トピックをご覧ください。

Note

Xamarin.Android 5.0 リリースでは、Android 呼び出し可能ラッパーの既定のパッケージ名は、エクスポートされる型のアセンブリ修飾名の MD5SUM に基づきます。 これにより、2 つの異なるアセンブリから同じ完全修飾名を指定できるようになり、パッケージ化エラーは発生しません。 したがって、Instrumentation 属性の Name プロパティを使用して、読み取り可能な ACW/クラス名を生成するようにしてください。

"ACW 名は、上の adb コマンドで使用する必要があります"。 したがって、C# クラスの名前を変更したりリファクタリングしたりするには、正しい ACW 名を使用するように RunTests コマンドを変更する必要があります。