Udostępnij za pomocą


Jak zautomatyzować projekt testowy Android NUnit?

Uwaga

W tym przewodniku wyjaśniono, jak zautomatyzować projekt testowy NUnit systemu Android, a nie projekt Xamarin.UITest. Informacje o narzędziu Xamarin.UITest można znaleźć tutaj.

Podczas tworzenia projektu Aplikacji testowej jednostkowej (Android) w programie Visual Studio (lub projekcie testów jednostkowych systemu Android w Visual Studio dla komputerów Mac) ten projekt nie będzie automatycznie uruchamiał testów domyślnie. Aby uruchomić testy NUnit na urządzeniu docelowym, możesz utworzyć podklasę Android.App.Instrumentation uruchomioną przy użyciu następującego polecenia:

adb shell am instrument

W poniższych krokach wyjaśniono ten proces:

  1. Utwórz nowy plik o nazwie 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 ());
            }
        }
    }
    

    W tym pliku (z Xamarin.Android.NUnitLite.dll) jest podklasą w celu utworzenia elementu TestInstrumentation. Xamarin.Android.NUnitLite.TestSuiteInstrumentation

  2. Zaimplementuj TestInstrumentation konstruktor i metodę AddTests . Metoda AddTests kontroluje, które testy są rzeczywiście wykonywane.

  3. Zmodyfikuj plik, .csproj aby dodać TestInstrumentation.cs. Na przykład:

    <?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. Wdróż aplikację w trybie debugowania lub wydania, a następnie zatrzymaj ją.

  5. Użyj następującego polecenia, aby uruchomić testy jednostkowe. Zastąp PACKAGE_NAME ciąg nazwą pakietu aplikacji (nazwę pakietu można znaleźć w atrybucie aplikacji /manifest/@package znajdującym się w AndroidManifest.xml):

    adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
    
  6. Opcjonalnie możesz zmodyfikować plik, .csproj aby dodać obiekt docelowy RunTests MSBuild. Dzięki temu można wywołać testy jednostkowe za pomocą polecenia podobnego do następującego:

    msbuild /t:RunTests Project.csproj
    

    (Pamiętaj, że użycie tego nowego obiektu docelowego nie jest wymagane; można użyć wcześniejszego adbmsbuildpolecenia zamiast .)

Aby uzyskać więcej informacji na temat uruchamiania testów jednostkowych za adb shell am instrument pomocą polecenia , zobacz temat Android Developer Running tests with ADB (Uruchamianie testów dla deweloperów systemu Android w usłudze ADB ).

Uwaga

W wersji Xamarin.Android 5.0 domyślne nazwy pakietów dla opakowań callable systemu Android będą oparte na MD5SUM nazwy kwalifikowanej przez zestaw typu eksportowanego. Dzięki temu ta sama w pełni kwalifikowana nazwa może być dostarczana z dwóch różnych zestawów i nie występuje błąd pakowania. Dlatego upewnij się, że używasz Name właściwości atrybutu Instrumentation w celu wygenerowania czytelnej nazwy ACW/klasy.

Nazwa ACW musi być używana w poleceniu adb powyżej. Zmiana nazwy/refaktoryzacji klasy C# będzie wymagać modyfikacji RunTests polecenia w celu użycia poprawnej nazwy ACW.