Tim*_*ann 9 c# decimal xunit.net
我正在尝试使用xUnit.net进行单元测试.我想用'[InlineData]'进行'理论'测试,其中包括'小数':
[Theory]
[InlineData(37.60M)]
public void MyDecimalTest(decimal number)
{
Assert.Equal(number, 37.60M);
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为您不能将小数创建为常量.我找到了解决方法,把数引号 LIK如此__CODE__.这实际上会将其转换为双重,这将使测试失败.
问题:
有解决方法吗?如果不是,为我的测试创建多个测试用例的最简单方法是什么?
Dav*_*haw 16
您应该能够使用Attribute中的String值并将Parameter类型设置为Decimal,据我所知,它由测试框架自动转换.
[Theory]
[InlineData("37.60")]
public void MyDecimalTest(Decimal number)
{
Assert.Equal(number, 37.60M);
}
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,那么您可以通过传入String参数手动转换它.
[Theory]
[InlineData("37.60")]
public void MyDecimalTest(String number)
{
var d = Convert.ToDecimal(number);
Assert.Equal(d, 37.60M);
}
Run Code Online (Sandbox Code Playgroud)
Sti*_*nin 11
而不是InlineData,使用MemberData如这里所示。这为您设置多个测试提供了更大的灵活性,并允许使用小数或任何其他非常量类型。
public class CalculatorTests
{
public static IEnumerable<object[]> Data =>
new List<object[]>
{
new object[] { 1.2M, 2.1M, 3.3M },
new object[] { -4.000M, -6.123M, -10.123M }
};
[Theory]
[MemberData(nameof(Data))]
public void CanAddTheoryMemberDataProperty(decimal value1, decimal value2, decimal expected)
{
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
}
Run Code Online (Sandbox Code Playgroud)