C# memberdata的循环xunit单元测试方法参数
我使用xUnit测试了这个方法C# memberdata的循环xunit单元测试方法参数,c#,xunit,C#,Xunit,我使用xUnit测试了这个方法 public class Cal { public int Output { get; set; } public void Add(int num1, int num2) => Output = num1 + num2; } 在我的单元测试xUnit中,我有 public class CalTest { private readonly Cal _cal; publ
public class Cal
{
public int Output { get; set; }
public void Add(int num1, int num2) => Output = num1 + num2;
}
在我的单元测试xUnit中,我有
public class CalTest
{
private readonly Cal _cal;
public CalTest()
{
_cal = new Cal();
}
[Theory, MemberData(nameof(Data))] // Arrange
public void CanAdd2Numbers(int expected, params int[] valuesToAdd)
{
// Act
foreach (var value in valuesToAdd)
{
//_cal.Add(value[0], value[1]);
}
// Assert
Assert.Equal(expected, _cal.Output);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
公共类CalTest
{
私有只读卡_-Cal;
公共CalTest()
{
_cal=新cal();
}
[Theory,MemberData(nameof(Data))]//排列
public void CANADD2编号(应为int,参数int[]value stoadd)
{
//表演
foreach(valuesToAdd中的var值)
{
//_计算加(值[0],值[1]);
}
//断言
Assert.Equal(预期,_校准输出);
}
公共静态IEnumerable数据()
{
返回新列表
{
新对象[]{1,2,3},
新对象[]{-1,1,0}
};
}
}
如何传递数组的第一个元素为
num1
,第二个元素为num2
,第三个元素为预期结果?我不想使用InlineData
您可以将MemberData数组元素分配给测试方法参数,如下所示:
public class Test
{
[Theory]
[MemberData(nameof(Data))]
public void CanAdd2Numbers(int num1, int num2, int expected)
{
var actual = num1 + num2;
Assert.Equal(expected, actual);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
公共类测试
{
[理论]
[成员数据(名称(数据))]
公共无效CANADD2编号(整数num1、整数num2、整数预期)
{
var实际值=num1+num2;
断言。相等(预期、实际);
}
公共静态IEnumerable数据()
{
返回新列表
{
新对象[]{1,2,3},
新对象[]{-1,1,0}
};
}
}
您可能还想通过这篇博文了解如何将测试数据转换为强类型:您可以使用tuple:
public static IEnumerable<(int a, int b,int c)> Data()
{
return new List<(int a, int b,int c)>
{
(a:1,b:2,c:3),
(a:1,b:-1,c:0)
};
}
如果我明白你的意思。。。你不能静态地,但是你可以创建一个专门的测试来实现这一点,或多或少地说明我的
[理论,MemberData(nameof(Data3))]
会是什么?
_cal.Add(value.a, value.b);
Assert.Equal(value.c, _cal.Output);