M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

NUnitことはじめ (3)

引きつづき、NUnitについて見ていきます。原文は、“NUnit 2.5.9”です。

最後はユーティリティメソッドやその他のアサーションクラスについて。例によって強引な翻訳になっているかも知れません。

******************************

ユーティリティメソッド

Pass()Fail()Ignore() そして Inconclusive()の4つのメソッドは、より直接にテスト工程を制御する目的で提供されています。

Assert.Pass();
Assert.Pass( string message );
Assert.Pass( string message, object[] parms );

Assert.Fail();
Assert.Fail( string message );
Assert.Fail( string message, object[] parms );

Assert.Ignore();
Assert.Ignore( string message );
Assert.Ignore( string message, object[] parms );

Assert.Inconclusive();
Assert.Inconclusive( string message );
Assert.Inconclusive( string message, object[] parms );

Assert.Passメソッドはテストを即座に終了させ、“成功”として記録することを可能にします。このメソッドは、例外を投げることで、テストを簡単に終わらせることができます。Assert.Passメソッドはメッセージをテスト結果に出力して、場合によってはテスト結果をより分かりやすくすることができます。加えて、この節で解説している他のメソッド同様、入れ子になったメソッド呼び出しの中で呼び出して、テストを即座に終了させることができます。

Assert.Failメソッドは、入れ子になっていないメソッド呼び出しテスト内で“失敗”を発生させることができます。このメソッドはまた個々のプロジェクトに固有のアサーションを定義するのに有効です。
次に示す例は、ある文字列が期待される値を含んでいるかどうかをテストする、プロジェクト固有アサーション(a private assertion)を作成するものです。

public void AssertStringContains( string expected, string actual )
{
    AssertStringContains( expected, actual, string.Empty );
}

public void AssertStringContains( string expected, string actual,
    string message )
{
    if ( actual.IndexOf( expected ) < 0 )
        Assert.Fail( message );
}

Assert.Ignoreメソッドは、動的にテスト項目や一連の処理を実施対象から外すことを可能にします。このメソッドは、テストメソッド、セットアップメソッド、テストクラス初期化メソッド(a test, setup or fixture setup method)のなかで呼ぶことができます。このメソッドは、特別な場合にのみ使用するようにすべきでしょう。カテゴリーファシリティ(訳者:NUnitで定義されている属性の1つ)は、より高度なテストケースの実施する/しないの制御や、異なる状況で実行されるテスト項目の選択を可能にします。

Assert.Inconclusiveメソッドは、そのテストが有効なかたちで完了しない可能性のあることを示します。他のデータを用いて実施した際には、結果が成功にしろ失敗にしろともかくテストが完了することを示すときに使用されます。

StringAssert (NUnit 2.2.3)

StringAssertクラスは、文字列の値を検証するのに便利なメソッドをいくつも持っています。

(訳者:サンプルコードは省略します。同クラスは、ある文字列に別のある文字列に含まれているかどうか、ある文字列から始まる/終わるかどうか、正規表現にマッチするかどうか、大文字小文字を無視した場合等価といえるかどうか、といった事項を検証するのに便利です。)

CollectionAssert (NUnit 2.4 / 2.5)

CollectionAssertクラスは、コレクションオブジェクトとその要素を検証したり、2つのコレクションを比較したりするのに便利なメソッドをいくつも提供しています。

多重定義されたAreEqualメソッドは、2つのコレクションの対応する要素どうしが等しいとき、“成功”となります。AreEquivalentメソッドは、順序に関わりなく、コレクションの要素が等しいことを検証します。どちらのケースでも、比較は、NUnit標準の等価性比較(訳者:AreEqualメソッドの節を参照)を使用して行われます。

NUnit 2.4.6以降、これらのメソッドは、IEnumerableインターフェースを実装したいかなるオブジェクトに対しても使用可能となりました。これ以前のバージョンでは、このメソッドはコレクションしかサポートしていませんでした。

(訳者:サンプルコードは省略します。CollectionAssertクラスには上記のメソッド以外にも、コレクションのすべての子要素が一意的(unique)であること、nullでないこと、あるコレクションが別のあるコレクションのサブセットであること、順序付きであること──などについて検証するためのメソッドが揃っています。

FileAssert (NUnit 2.4)

FileAssertクラスは、2つのファイルを比較するメソッドを持っています。ファイルはStreamFileInfos、ファイルを指すパスのstringとして指定します。

(訳者:サンプルコードは省略します。)

DirectoryAssert (NUnit 2.5)

DirectoryAssertクラスは、ファイルシステムのディレクトリについてのアサーションを行うメソッドを持っています。ディレクトリは、DirectoryInfosか、ディレクトリを指すパスのstringを使用して指定します。

DirectoryAssert.AreEqual()DirectoryAssert.AreNotEqual()の2つのメソッドは、2つのディレクトリの等価性をチェックします。2つのディレクトリの名前、属性、作成日時そして最終アクセス日時が同じ場合、これらのディレクトリはイコールであると見なされます。

注意:同じファイル(訳者:NUnitにより等価と判断されるファイル)を格納していたとしても、ディレクトリが異なればイコールとは見なされません。

DirectoryAssert.IsEmpty()DirectoryAssert.IsNotEmpty()という2つのメソッドは、そのディレクトリが空であるかどうかを確認します。

DirectoryAssert.IsWithin()DirectoryAssert.IsNotWithin()は、第1引数で与えられたディレクトリに対し、第2引数で与えられたディレクトリが直接もしくは間接のサブディレクトリであるかどうかをチェックします。

(訳者:サンプルコードは省略します。)

******************************

とりあえず、翻訳はここまでにします。
原文では、制約ベース・アサーション・モデルについての解説が続きます。