Xamarin.iOS アプリの単体テスト

このドキュメントでは、Xamarin.iOS プロジェクト用の単体テストを作成する方法について説明します。 Xamarin.iOS での単体テストは、Touch.Unit フレームワークを使用して行います。このフレームワークには、iOS テスト ランナーと、単体テストを記述するために使い慣れた一連の API を提供する Touch.Unit という NUnit の変更バージョンの両方が含まれます。

Visual Studio for Mac でのテスト プロジェクトの設定

プロジェクトの単体テスト フレームワークを設定する場合、単に iOS 単体テスト プロジェクトという種類のプロジェクトをソリューションに追加するだけです。 これを行うには、ソリューションを右クリックし、[新しいプロジェクトの追加] >を選択します。 一覧から [ iOS > テスト > ] [統合 API > ] [iOS 単体テスト プロジェクト ] を選択します (C# または F# のいずれかを選択できます)。

C# または F# を選択する

これで基本的なプロジェクトが作成されます。このプロジェクトは基本的なランナー プログラムを含み、新しい MonoTouch.NUnitLite アセンブリを参照します。プロジェクトは次のようになります。

ソリューション エクスプローラーのプロジェクト

AppDelegate.cs クラスにはテスト ランナーが含まれ、次のようになります。

[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;
    }
}

注意

iOS 単体テストのプロジェクト タイプは、Windows 上の Visual Studio 2019 または Visual Studio 2017 では使用できません。

何らかのテストを書いてみる

これで基本的なシェルの準備ができたので、最初の一連のテストを書く必要があります。

テストは、[TestFixture] 属性が適用されたクラスを作成することで書き込まれます。 各 TestFixture クラス内では、テスト ランナーで呼び出すすべてのメソッドに [Test] 属性を適用する必要があります。 実際のテスト フィクスチャはテスト プロジェクトのどのファイルにも存在できます。

作業をすばやく開始するには、 [追加]、[新規ファイルの追加] を選択し、Xamarin.iOS グループの [UnitTests] を選択します。 これで、以下のように成功したテスト、失敗したテスト、および無視されたテストをそれぞれ 1 つずつ含むスケルトン ファイルが追加されます。

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);
        }
    }
}

テストの実行

ソリューション内でこのプロジェクトを実行するには、プロジェクトを右クリックし、 [Debug Item]\(アイテムのデバッグ\) または [Run Item]\(アイテムの実行\) を選択します。

テスト ランナーでは、登録されるテストを確認し、実行可能なテストを個別に選択できます。

登録されたテストの一覧個々のテキスト

実行結果

個々のテスト フィクスチャを実行する場合は、入れ子ビューからテスト フィクスチャを選択します。あるいは、"すべて実行" ですべてのテストを実行することもできます。 既定のテストを実行する場合、成功したテスト、失敗したテストおよび無視されたテストが 1 つずつ含まれることが想定されます。 そのレポートは次のようになり、失敗したテストに直接ドリルダウンして、失敗に関する詳細情報を見つけることができます。

サンプル レポートの [テスト ランナー] 画面を示すスクリーンショット。サンプル レポートの [テスト] 画面を示すスクリーンショット。サンプル レポートの [テスト] 画面とテスト状態を示すスクリーンショット。

IDE のアプリケーション出力ウィンドウで、実行中のテストとその現在の状態を確認することもできます。

新しいテストの書き込み

NUnitLite は、Touch.Unit プロジェクトという NUnit の変更バージョンです。 .NET 用の軽量なテスト フレームワークであり、NUnit のアイデアに基づいており、その機能のサブセットを提供します。 最小限のリソースを使用し、埋め込みおよびモバイル開発で使用されるものなど、リソースに制限のあるプラットフォームで実行されます。 Xamarin.iOS では NUnitLite API を使用できます。 単体テスト テンプレートで提供される基本的なスケルトンの場合、メイン エントリ ポイントは Assert クラス メソッドになります。

assert クラス メソッドに加え、単体テスト機能は、NUnitLite の一部である以下の名前空間に分けられます。