2017-05-24 11 views
3

xUnit.netを使用すると、は派生クラスに由来する可能性がありますか? xUnit.net The 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 
    } 
} 

次のエラーメッセージで結果上記コード:

System.NotSupportedException:指定されたメソッドがサポートされていません。

答えて

3

私が知る限り、これは不可能です。 MemberDataのデータはstaticである必要があります。そのため、データは独自のクラスから生成する必要があります。

public static IEnumerable<object[]> Data() 
{ 
    // data goes here 
} 

[Theory] 
[MemberData(nameof(Data))] 
public void TestData(string expected, string actual) 
{ 
    // assert goes here 
} 
1

あなたの答えは正しいですか?この無回答を投稿すると、それが起こった場合に備えてアイデアを発する。

MemberData特定のシナリオに応じて役立つかもしれないパラメータを渡すことはできますか?それ以外

は、あなたがPROBできる最高のフォワーダ入れることです:、自分の特定のクラスでテストシナリオを置くことです

public abstract class BaseTest 
{ 
    protected void RunTest(string expected, string actual) 
    { 
     Assert.Equal(expected, actual); 
    } 
} 

public class ComplexTest : BaseTest 
{ 
    static IEnumerable<object[]> Data() = 
    { 
     { "a", "a" } 
    } 

    [Theory, MemberData(nameof(Data))] 
    void TestData(expected, actual) => base.RunTest(expected, actual); 
} 
1

(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 
    } 
}