xUnitで入力データ、結果をファイルから読み込むテストで、テストエクスプローラーにキャプション表示するコードを紹介します。
こちらの記事では、入力データと結果をファイルから読み込むテストを作成しました。
テストの項目が少ないうちは問題ないのですが、テストの項目が増えるとどのテストデータかわかりにくくなってしまいます。
この記事では、テスト項目に対してテストエクスプローラーにキャプション文字列を表示する方法を紹介します。
テストエクスプローラーには、テストメソッドの引数が表示されるため、テストメソッドの引数を増やし、
先頭の引数にわかりやすいキャプション文字列を与える動作にします。
テストプロジェクトを作成し、以下のコードを記述します。
なお、テストされるMyClass
は別プロジェクトのクラスです。~
using System.Reflection;
using Xunit.Sdk;
using xUnitTestDataAttribute;
namespace xUnitTestDataAttributeWithCaptionTest
{
public class UnitTest1
{
[Theory]
[FileTestData("test1.txt", "result1.txt")]
[FileTestData("test2.txt", "result2.txt")]
[FileTestData("test3.txt", "result3.txt")]
public void Test1(string fileName, string test, string result)
{
MyClass m = new MyClass();
Assert.Equal(m.proc(test), result);
}
}
public class FileTestDataAttribute : DataAttribute
{
private string _CaseFileName;
private string _ResultFileName;
public FileTestDataAttribute(string CaseFileName, string ResultFileName)
{
_CaseFileName = CaseFileName;
_ResultFileName = ResultFileName;
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
string TestCase = System.IO.File.ReadAllText(_CaseFileName);
string ResultCase = System.IO.File.ReadAllText(_ResultFileName);
List<object[]> result = new List<object[]>();
result.Add(new object[] { _CaseFileName, TestCase, ResultCase });
return result;
}
}
}
GetDataメソッドで返却される IEnumerable<object[]>
オブジェクトの値が、テストメソッドの引数に与えられます。
IEnumerable<object[]>
オブジェクトの result に追加する際に、最初の値にわかりやすい名称を設定します。
今回は入力ファイル名を設定しています。
result.Add(new object[] { _CaseFileName, TestCase, ResultCase });
テスト実行結果が下図です。テスト項目の最初に fileName:"test1.txt"
などの文字が表示され、どのファイルに対する
テストかがわかりやすくなりました。