文字列、整数、double などの単純なデータ型を Xunit の [ Theory ] テストにパラメータとして渡すのは、属性を使用することで簡単ですInlineData のような。ただし、より複雑なパラメーターの場合、そのようなデータをどのように提供するかという問題が生じます。
XUnit は MemberData 属性を提供します。これにより、IEnumerable
例:
public class StringTests { [Theory, MemberData(nameof(SplitCountData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } public static IEnumerable<object[]> SplitCountData => new List<object[]> { { "xUnit", 1 }, { "is fun", 2 }, { "to test with", 3 } }; }
Xunit 2.0 より前では、次のようにすることができました。 ClassData 属性を使用して、異なるクラスのテスト間でデータ ジェネレーターを共有します。
の場合例:
public class StringTests { [Theory, ClassData(typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) { Assert.Equal(expected, input.IndexOf(letter)); } } public class IndexOfData : IEnumerable<object[]> { // ... data and methods }
Xunit 2.0 以降では、MemberData は MemberType パラメーターを取得して、別のクラスの静的メンバーを指定できます。
For例:
public class StringTests { [Theory] [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } }
または、必要に応じて ClassData を使用することもできます。データジェネレーターとテストメソッドの分離
以上がXunit の [理論] テストに複雑なパラメーターを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。