2017-05-16 8 views
0

Funcパラメータをユニットテスト理論に渡しています。私がやっていることの要点については、Pass complex parameters to [Theory]を参照してください。funcパラメータを理論に渡すときにテストレポータをテストする

私が抱えている問題は、テストレポートが結果を個別に分解しないことです。説明する小さな例があります。生産理論にはもっと多くのケースがあります。

public class TestReporting { 
    public static IEnumerable<object[]> BoolTestData() { 
    yield return new object[] { true, true }; 
    yield return new object[] { true, false }; 
    } 
    [Theory, MemberData(nameof(BoolTestData))] 
    public void CheckBoolEquality(bool b1, bool b2) { 
    Assert.Equal(b1, b2); 
    } 

    public static IEnumerable<(string, Func<string, string>, string)> RawTestData() { 
    yield return ("Hello", str => str.Substring(3), "lo"); 
    yield return ("World", str => str.Substring(0, 4), "worl"); 
    } 
    public static IEnumerable<object[]> StringTestData() { 
    return RawTestData().Select(vt => new object[] { vt.Item1, vt.Item2, vt.Item3 }); 
    } 

    [Theory, MemberData(nameof(StringTestData))] 
    public void RunStringTest(string input, Func<string, string> func, string expectedOutput) { 
    var output = func(input); 
    Assert.Equal(expectedOutput, output); 
    } 
} 

試運転出力 - 言い換えそれだけでトップレベルの情報ブール場合には、それは私が勃発したことを

Failed Tests(2) 
    CheckBoolEquality(b1: True, b2: False) 
    RunStringTest 

Passed Tests(1) 
    CheckBoolEquality(b1: True, b2: True) 

お知らせペーストをコピーすることはできていないようとして2つのテストにテストします。合格はtrue = true、間違いはtrue = falseです。それが私が望むものです。

しかし、文字列の場合、おそらくFuncを記述する方法がわからないので、あきらめるだけですべてが失敗すると言います。

私はこのようなもの、すなわち、それはちょうどそれができる部品を報告持って完全に幸せになるだろう:

Failed Tests(2) 
    CheckBoolEquality(b1: True, b2: False) 
    RunStringTest("World") 

Passed Tests(2) 
    CheckBoolEquality(b1: True, b2: True) 
    RunStringTest("Hello") 

が可能ということですか?

答えて

0

これは報告を改善 - あなたは少なくとも、失敗した文字列のテスト内の結果を参照してください。

public class TestReporting { 
    public static IEnumerable<object[]> BoolTestData() { 
    yield return new object[] { true, true }; 
    yield return new object[] { true, false }; 
    } 
    [Theory, MemberData(nameof(BoolTestData))] 
    public void CheckBoolEquality(bool b1, bool b2) { 
    Assert.Equal(b1, b2); 
    } 

    public static IEnumerable<(string, Expression<Func<string, string>>, string)> RawTestData() { 
    yield return ("Hello", str => str.Substring(3), "lo"); 
    yield return ("World", str => str.Substring(0, 4), "worl"); 
    } 
    public static IEnumerable<object[]> StringTestData() { 
    return RawTestData().Select(vt => new object[] { vt.Item1, vt.Item2, vt.Item3 }); 
    } 

    [Theory, MemberData(nameof(StringTestData))] 
    public void RunStringTest(string input, Expression<Func<string, string>> func, string expectedOutput) { 
    var output = func.Compile()(input); 
    Assert.Equal(expectedOutput, output); 
    } 

} 
関連する問題