{
"title": "ソースの指定 - xUnit.net",
"useMathjax": false,
"isDraft": true
}
================================================================================
xUnit.net
には準備されている。Theory
属性をつけないとテストは実行されない。(逆に [Fact]
は必要ない)InlineData
の引数はすべて object
型になるため実行するまで型があってるかの情報は得られない。[Theory,
InlineData(0, 0, 0),
InlineData(1, 0, 1),
InlineData(1, 1, 0),
InlineData(2, 1, 1)]
public void AddTest(int expected, int x, int y)
{
Assert.Equal(expected, Add(x, y));
}
Theory
属性をつけないとテストは実行されないstatic
メンバー関数が実行されその結果がテストに渡されるIEnumerable<T>
と yield
を利用すればきれいに書けるpublic static IEnumerable<object[]> GetSource()
{
yield return new object[] { 0, 0, 0 };
yield return new object[] { 1, 0, 1 };
yield return new object[] { 1, 1, 0 };
yield return new object[] { 2, 1, 1 };
}
[Theory,
MemberData(nameof(GetSource))]
public void AddTest(int expected, int x, int y)
{
Assert.Equal(expected, Add(x, y));
}
static
プロパティーの値がテストに渡されるpublic static object[][] Source
{
get
{
return new object[][]
{
new object[] { 0, 0, 0 },
new object[] { 1, 0, 1 },
new object[] { 1, 1, 0 },
new object[] { 2, 1, 1 },
};
}
}
[Theory,
MemberData(nameof(Source))]
public void AddTest(int expected, int x, int y)
{
Assert.Equal(expected, Add(x, y));
}
static
フィールドの値がテストに渡されるpublic static object[][] Source = new object[][]
{
new object[] { 0, 0, 0 },
new object[] { 1, 0, 1 },
new object[] { 1, 1, 0 },
new object[] { 2, 1, 1 },
}
[Theory,
MemberData(nameof(Source))]
public void AddTest(int expected, int x, int y)
{
Assert.Equal(expected, Add(x, y));
}
TheoryAttribute
と ClassDataAttribute
を使って、ソースを持つ class
を使用する。
public class Tests
{
[Theory, ClassData(typeof(ParseIntSource))]
public void ParseInt(int expected, string source)
{
Assert.Equal(expected, int.Parse(source));
}
}
public class ParseIntSource : IEnumerable<object[]>
{
private readonly List<object[]> _data = new List<object[]>
{
new object[] { 1, "1" },
new object[] { 2, "2" },
};
public IEnumerator<object[]> GetEnumerator()
{ return _data.GetEnumerator(); }
IEnumerator IEnumerable.GetEnumerator()
{ return GetEnumerator(); }
}