bud*_*udi 5 c# xunit xunit.net
使用xUnit.net,它是可能的Theory有它MemberData派生类起源的?
public abstract class BaseTest
{
public abstract IEnumerable<object[]> Data();
[Theory]
[MemberData(nameof(Data))]
public void TestData(string expected, string actual)
{
// assert goes here
}
}
public class ComplexTest : BaseTest
{
public override IEnumerable<object[]> Data()
{
// data goes here
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致以下错误消息:
System.NotSupportedException:不支持指定的方法。
Ayb*_*btu 10
另一种方法(和 IMO 更清洁)是将您的测试场景放在它们自己的特定类中,并将每个场景集定义为单独的 MemberData 属性:
public class BaseTest
{
[Theory]
[MemberData(nameof(TestScenarios1.Data), MemberType = typeof(TestScenarios1)]
[MemberData(nameof(TestScenarios1.MoreData), MemberType = typeof(TestScenarios1)]
[MemberData(nameof(TestScenarios2.DifferentData), MemberType = typeof(TestScenarios2)]
public void TestData(string expected, string actual)
{
// assert goes here
}
}
public class TestScenarios1
{
public static IEnumerable<object[]> Data()
{
// data goes here
}
public static IEnumerable<object[]> MoreData()
{
// data goes here
}
}
public class TestScenarios2
{
public static IEnumerable<object[]> DifferentData()
{
// data goes here
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是不可能的。MemberData的数据必须是static,因此数据必须来自它自己的类。
public static IEnumerable<object[]> Data()
{
// data goes here
}
[Theory]
[MemberData(nameof(Data))]
public void TestData(string expected, string actual)
{
// assert goes here
}
Run Code Online (Sandbox Code Playgroud)