xUnit.Netフレームワークの操作方法
私はかなり長い間xUnitを使用しており、それが私のユニットテストフレームワークとして選択されています。これは、ReSharper、CodeRush、TestDriven.Net、およびXamarinと互換性のある.Netフレームワーク用のオープンソースの単体テストツールです。xUnit.Netを利用して、例外タイプを簡単にアサートできます。また、xUnit.Netでファクト属性または理論属性を拡張でき、パラメーター化された単体テストを作成するための優れたサポートを提供します。xUnit.NetのGithubリポジトリリンクは次のとおりです。
VisualStudioでxUnit.netを操作する方法は次のとおりです。このデモンストレーションでは、Visual Studio 2015を使用しますが、他の互換性のあるバージョンのVisualStudioでも使用できます。次に、次の簡単な手順に従って、VisualStudioでxUnit.Netを操作するための環境をセットアップします。
- Visual Studio 2015UDEを開きます
- タイプ「クラスライブラリ」の新しいプロジェクトを作成します
- プロジェクトを名前で保存します
- 次に、NuGetパッケージマネージャーを介してxUnit.Netをインストールします
以上です!Visual Studio IDE内で単体テストを実行するには、VisualStudio用のxUnit.netランナーを使用できます。パッケージマネージャーのコンソールウィンドウを使用してxUnit.net [ランナー:Visual Studio]パッケージをインストールするには、次のように指定する必要があります。
Install-Package xunit.runner.visualstudio -Version 2.1.0
Visual Studio IDE内からxUnit.Net単体テストを実行できるように、環境をセットアップするために必要なのはこれだけです。
事実と理論
よく知られている一般的な[Test]属性とは異なり、xUnit.netを使用して単体テストメソッドを作成するには、[Fact]属性を使用する必要があります。xUnit.netは、事実と理論の2種類の単体テストをサポートしていることに注意してください。
事実は不変条件をテストするために使用されますが、理論はメソッドに引数として渡される特定のデータセットに当てはまるテストです。通常、[Fact]属性を使用して、メソッド引数のない単体テストを記述します。
ただし、[Theory]属性では、メソッド引数として1つ以上のDataAttributeインスタンスを渡す必要があります。本質的には、データ駆動型の単体テストを作成するために[Theory]属性を使用する必要があります。データ駆動型単体テストは、さまざまなデータセットに対して実行される単体テストです。
xUnit.NetとそのランナーforVisual Studioがインストールされていると仮定して、最初に[Fact]属性を使用して簡単な単体テストを記述しましょう。次の単体テスト方法を検討してください。ここでは[Fact]属性を利用します。
[Fact]
public void CheckEqualityTest()
{
Assert.Equal(10, Sum(5, 5));
}
Sumメソッドは2つの整数を受け入れ、それらの合計を返します。
private int Sum(int x, int y)
{
return x + y;
}
このテストを実行すると、単体テストに合格します。これは、Visual StudioIDEのテストエクスプローラーWindowsで確認できます。次に、理論を使用してデータ駆動型の単体テストを実行する方法を見ていきましょう。
次のコードスニペットは、xUnit.Netを使用してデータ駆動型単体テストを操作する方法を示しています。
[Theory, InlineData("This is a data driven test", "data")]
public void CheckInputTest(string input, string substring)
{
Assert.Equal(true, input.Contains(substring));
}
上記のコードスニペットを参照してください。[Theory]属性の使用法に注意してください。単体テストがデータ駆動型でない限り、単体テストメソッドで[Fact]属性を選択する必要があります。CheckInputという名前のデータ駆動型単体テストメソッドでパラメーターがどのように渡されたかに注意してください。InlineData属性は、ソースコードデータを提供します。この例では、データはインライン値を介してユニットテストメソッドに渡されます。複数のInlineData属性を持つこともできます。コンマを使用してそれらを区切る必要があります。これを実現する方法は次のとおりです。
[Theory, InlineData("This is a data driven test", "data"),
InlineData("This is another set of data for the data driven test", "data")]
public void CheckInputTest(string input, string substring)
{
Assert.Equal(true, input.Contains(substring));
}
上記のデータ駆動型テストを実行すると、CheckInputTestメソッドが2回実行されます(入力データのセットごとに1回)。