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
次の手順では、このプロセスについて説明します。
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
をサブクラス化します。TestInstrumentation
コンストラクターとAddTests
メソッドを実装します。AddTests
メソッドでは、実際に実行されるテストを制御します。.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=""$(_AndroidPlatformToolsDirectory)adb" $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" /> </Target> ... </Project>
デバッグ モードまたはリリース モードでアプリケーションを展開した後、それを停止します。
単体テストを実行するには、次のコマンドを使用します。
PACKAGE_NAME
をアプリのパッケージ名に置き換えます (パッケージ名は、AndroidManifest.xml にあるアプリの/manifest/@package
属性で確認できます)。adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
必要に応じて、
.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
コマンドを変更する必要があります。