Komponententests bei Xamarin.iOS-AppsUnit Testing Xamarin.iOS Apps

Dieses Dokument beschreibt, wie Sie Komponententests für Ihre Xamarin.iOS-Projekte erstellen.This document describes how to create unit tests for your Xamarin.iOS projects. Komponententests mit Xamarin.iOS werden mithilfe des Touch.Unit-Frameworks durchgeführt, das sowohl einen iOS Test Runner als auch eine geänderte Version von NUnit mit dem Namen Touch.Unit enthält, die eine Reihe vertrauter APIs zum Schreiben von Komponententests bietet.Unit testing with Xamarin.iOS is done using the Touch.Unit framework that includes both an iOS test runner as well as a modified version of NUnit called Touch.Unit that provides a familiar set of APIs for writing unit tests.

Einrichten eines Testprojekts in Visual Studio für MacSetting up a test project in Visual Studio for Mac

Sie müssen Ihrer Projektmappe ein Projekt des Typs iOS-Komponententestprojekt hinzufügen, um ein Komponententestframework für Ihr Projekt einzurichten.To setup a unit testing framework for your project, all you need to do is to add to your solution a project of type iOS Unit Tests Project. Klicken Sie dafür mit der rechten Maustaste auf Ihre Projektmappe, und wählen Sie Hinzufügen > Neues Projekt hinzufügen aus.Do this by right-clicking on your solution and selecting Add > Add New Project. Wählen Sie aus der Liste iOS > Tests > Unified API > iOS-Komponententestprojekt aus. Sie können entweder C# oder F# auswählen.From the list select iOS > Tests > Unified API > iOS Unit Tests Project (you can choose either C# or F#).

Auswählen von C# oder F#

Dadurch wird ein einfaches Projekt erstellt, dass ein grundlegendes Runnerprogramm enthält und das auf die neue Assembly „MonoTouch.NUnitLite“ verweist. Es wird folgendermaßen aussehen:The above will create a basic project that contains a basic runner program and which references the new MonoTouch.NUnitLite assembly, your project will look like this:

Das Projekt im Projektmappen-Explorer

Die Klasse AppDelegate.cs enthält den Test Runner und sieht folgendermaßen aus:The AppDelegate.cs class contains the test runner, and it looks like this:

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    UIWindow window;
    TouchRunner runner;

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        // create a new window instance based on the screen size
        window = new UIWindow (UIScreen.MainScreen.Bounds);
        runner = new TouchRunner (window);

        // register every tests included in the main application/assembly
        runner.Add (System.Reflection.Assembly.GetExecutingAssembly ());

        window.RootViewController = new UINavigationController (runner.GetViewController ());

        // make the window visible
        window.MakeKeyAndVisible ();

        return true;
    }
}

Hinweis

Der iOS-Projekttyp „Komponententest“ ist in Visual Studio 2019 oder in Visual Studio 2017 unter Windows nicht verfügbar.The iOS Unit Test project type is not available in Visual Studio 2019 or Visual Studio 2017 on Windows.

Schreiben einiger TestsWriting Some Tests

Nun da die grundlegende Shell vorhanden ist, sollten Sie Ihre erste Reihe von Tests schreiben.Now that you have the basic shell in place, you should write your first set of tests.

Tests werden geschrieben, indem Klassen erstellt werden, auf die das Attribut [TestFixture] angewendet wird.Tests are written by creating classes that have the [TestFixture] attribute applied to them. Sie sollten innerhalb jeder TestFixture-Klasse das Attribut [Test] für jede Methode anwenden, die den Test Runner aufrufen soll.Inside each TestFixture class you should apply the [Test] attribute to every method that you want the test runner to invoke. Die tatsächlichen Prüfvorrichtungen können in jeder Datei in Ihrem Testprojekt vorhanden sein.The actual test fixtures can live in any file in your Tests project.

Klicken Sie für einen schnellen Start auf Hinzufügen/Neue Datei hinzufügen, und wählen Sie in der Xamarin.iOS-Gruppe UnitTests aus.To quickly get started select Add/Add New File and select in the Xamarin.iOS group UnitTests. Dadurch wird eine Skelettdatei hinzugefügt, die einen bestandenen, einen fehlgeschlagenen und einen ignorierten Test enthält. Dies sieht folgendermaßen aus:This will add a skeleton file that contains one passing test, one failing test and one ignored tests, it looks like this:

using System;
using NUnit.Framework;

namespace Fixtures {

    [TestFixture]
    public class Tests {

        [Test]
        public void Pass ()
        {
                Assert.True (true);
        }

        [Test]
        public void Fail ()
        {
                Assert.False (true);
        }

        [Test]
        [Ignore ("another time")]
        public void Ignore ()
        {
                Assert.True (false);
        }
    }
}

Ausführen Ihrer TestsRunning Your Tests

Klicken Sie in Ihrer Projektmappe mit der rechten Maustaste auf das Projekt, um es auszuführen, und wählen Sie Debug Item (Element debuggen) oder Element ausführen aus.To run this project inside your solution right click on it and select Debug Item or Run Item.

Mit dem Test Runner können Sie sehen, welche Tests registriert sind, und Sie können einzeln auswählen, welche Tests ausgeführt werden können.The test runner allows you to see which tests are registered and select individually which tests can be executed.

Die Liste der registrierten Tests Individueller TextThe list of registered tests An individual text

Ergebnisse der AusführungThe run results

Sie können einzelne Prüfvorrichtungen ausführen, indem Sie sie aus den geschachtelten Ansichten auswählen, oder Sie können mit „Alles ausführen“ alle Ihre Tests ausführen.You can run individual test fixtures by selecting the text fixture from the nested views, or you can run all of your tests with "Run Everything". Wenn Sie den Standardtest ausführen, sollte dieser je einen Test enthalten, der je einen Test mit den Kriterien "bestanden", "fehlgeschlagen" und "ignoriert" enthalten soll.If you run the default test that is supposed to include one passing test, one failure and one ignored test. Die Berichte sehen folgendermaßen aus, und Sie können direkt einen Drilldown zu den fehlgeschlagenen Tests ausführen und mehr über den Fehler herausfinden:This is what the report looks like, and you can drill down directly to the failing tests and find out more information about the failure:

Beispielbericht Beispielbericht BeispielberichtA sample report A sample report A sample report

Im Anwendungsausgabefenster in Ihrer IDE können Sie auch die aktuell ausgeführten Tests und deren gegenwärtigen Status sehen.You can also look at the Application Output window in your IDE to see which tests are being executed and their current status.

Schreiben neuer TestsWriting New Tests

NUnitLite ist eine geänderte Version von NUnit mit dem Namen Touch.Unit-Projekt.NUnitLite is a modified version of the NUnit called Touch.Unit project. Es ist ein einfaches Testframework für .NET, das auf den Ideen von NUnit basiert und einen Teil seiner Funktionen bietet.It is a lightweight testing framework for .NET, based on the ideas in NUnit and providing a subset of its features. Es zeichnet sich durch minimalen Ressourcenverbrauch aus und kann so auch auf Plattformen mit eingeschränkten Ressourcen ausgeführt werden, die z.B. für die Entwicklung eingebetteter oder mobiler Lösungen verwendet werden.It uses minimal resources and will run on resource-restricted platforms such as those used in embedded and mobile development. Die NUnitLite-API steht Ihnen in Xamarin.iOS zur Verfügung.The NUnitLite API is available to you in Xamarin.iOS. Mit dem durch die Komponententestvorlage bereitgestellten grundlegenden Skelett, sind die Methoden Assert class Ihr Haupteinstiegspunkt.With the basic skeleton provided by the unit test template, your main entry point are the Assert class methods.

Zusätzlich zu den Methoden der Assert-Klasse sind die Funktionen der Komponententests in die folgenden Namespaces aufgeteilt, die Teil von NUnitLite sind:In addition to the assert class methods, the unit testing functionality is split on the following namespaces that are part of NUnitLite: