C# 将func参数传递给理论时,让测试报告员分解测试
我将Func参数传递给单元测试理论。看看我在做什么的要点 我遇到的问题是,测试报告没有单独分解结果。下面是一个小例子来说明。生产理论会有更多的案例C# 将func参数传递给理论时,让测试报告员分解测试,c#,unit-testing,xunit,C#,Unit Testing,Xunit,我将Func参数传递给单元测试理论。看看我在做什么的要点 我遇到的问题是,测试报告没有单独分解结果。下面是一个小例子来说明。生产理论会有更多的案例 public class TestReporting { public static IEnumerable<object[]> BoolTestData() { yield return new object[] { true, true }; yield return new object[] { true, fa
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);
}
}
请注意,在bool案例中,它将我的测试分为两个测试,一个通过的声明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")
这可能吗?这改进了报告--您可以在失败的字符串测试中看到结果,至少:
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);
}
}
公共类测试报告{
公共静态IEnumerable BoolTestData(){
返回新对象[]{true,true};
返回新对象[]{true,false};
}
[理论,成员数据(名称(BoolTestData))]
公共无效检查BOOLEQUALITY(bool b1、bool b2){
断言相等(b1,b2);
}
公共静态IEnumerable RawTestData(){
收益率回报(“Hello”,str=>str.Substring(3),“lo”);
收益率回报(“世界”,str=>str.Substring(0,4),“世界”);
}
公共静态IEnumerable StringTestData(){
返回RawTestData().Select(vt=>newobject[]{vt.Item1,vt.Item2,vt.Item3});
}
[理论,成员数据(名称(StringTestData))]
public void RunStringTest(字符串输入、表达式func、字符串预期输出){
var output=func.Compile()(输入);
Assert.Equal(预期输出、输出);
}
}
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);
}
}