xUnitで入力データ、結果をファイルから読み込むテストで、テストエクスプローラーにキャプション表示する

xUnitで入力データ、結果をファイルから読み込むテストで、テストエクスプローラーにキャプション表示するコードを紹介します。

概要

こちらの記事では、入力データと結果をファイルから読み込むテストを作成しました。 テストの項目が少ないうちは問題ないのですが、テストの項目が増えるとどのテストデータかわかりにくくなってしまいます。

xUnitで入力データ、結果をファイルから読み込むテストで、テストエクスプローラーにキャプション表示する:画像1

この記事では、テスト項目に対してテストエクスプローラーにキャプション文字列を表示する方法を紹介します。

方針

テストエクスプローラーには、テストメソッドの引数が表示されるため、テストメソッドの引数を増やし、 先頭の引数にわかりやすいキャプション文字列を与える動作にします。

プログラム例

テストプロジェクトを作成し、以下のコードを記述します。
なお、テストされる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" などの文字が表示され、どのファイルに対する テストかがわかりやすくなりました。
xUnitで入力データ、結果をファイルから読み込むテストで、テストエクスプローラーにキャプション表示する:画像2

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2024-12-30
Copyright © 1995–2025 iPentec all rights reserverd.