Freigeben über


Wie automatisiere ich ein Android NUnit-Testprojekt?

Hinweis

In dieser Führungslinie wird das Automatisieren eines Android NUnit-Testprojekts erläutert, nicht die Schritte für ein Xamarin.UITest-Projekt. Xamarin.UITest-Informationen finden Sie hier.

Wenn Sie ein Projekt für eine Komponententest-App (Android) in Visual Studio (oder ein Projekt für einen Android-Komponententest in Visual Studio für Mac) erstellen, führt dieses Projekt Ihre Tests nicht standardmäßig automatisch aus. Zum Ausführen von NUnit-Tests auf einem Zielgerät können Sie eine Android.App.Instrumentation-Unterklasse erstellen, die mithilfe des folgenden Befehls gestartet wird:

adb shell am instrument

Dieser Prozess wird in den folgenden Schritten erläutert:

  1. Erstellen Sie eine neue Datei namens 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 ());
            }
        }
    }
    

    In dieser Datei wird Xamarin.Android.NUnitLite.TestSuiteInstrumentation (von Xamarin.Android.NUnitLite.dll) als Unterklasse definiert, um TestInstrumentation zu erstellen.

  2. Implementieren Sie den TestInstrumentation-Konstruktor und die AddTests-Methode. Die AddTests-Methode steuert, welche Tests tatsächlich ausgeführt werden.

  3. Ändern Sie die .csproj-Datei, um TestInstrumentation.cs hinzuzufügen. Zum Beispiel:

    <?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. Stellen Sie Ihre Anwendung im Debug- oder Releasemodus bereit, und beenden Sie sie dann.

  5. Verwenden Sie den folgenden Befehl, um die Komponententests auszuführen. Ersetzen Sie PACKAGE_NAME durch den Paketnamen der App (der Paketname befindet sich im /manifest/@package-Attribut der App, das sich in der Datei AndroidManifest.xml befindet):

    adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
    
  6. Optional können Sie die .csproj-Datei bearbeiten, um das MSBuild-Ziel für RunTests hinzuzufügen. Dies ermöglicht das Aufrufen der Komponententests mithilfe eines Befehls wie dem folgenden:

    msbuild /t:RunTests Project.csproj
    

    (Beachten Sie, dass die Verwendung dieses neuen Ziels nicht erforderlich ist. Der frühere adb Befehl kann anstelle von msbuildverwendet werden.)

Weitere Informationen zur Verwendung des adb shell am instrument-Befehls zum Ausführen von Komponententests, finden Sie im Android Developer-Artikel Ausführen von Tests mit ADB.

Hinweis

Seit dem Release von Xamarin.Android 5.0 basieren die Standardpaketnamen für Android Callable Wrapper auf der MD5SUM-Hashfunktion des Namens mit Assemblyqualifikation des exportierten Typs. Dadurch kann derselbe voll qualifizierte Name von zwei verschiedenen Assemblys bereitgestellt werden, ohne dass ein Paketfehler auftritt. Stellen Sie also sicher, dass Sie die Name-Eigenschaft für das Instrumentation-Attribut verwenden, um einen lesbaren ACW- oder Klassennamen zu generieren.

Der ACW-Name muss im obigen adb-Befehl verwendet werden. Das Umbenennen/Umgestalten der C#-Klasse erfordert daher die Bearbeitung des RunTests-Befehls, um den richtigen ACW-Namen zu verwenden.