使用 InlineData 时出现 C# xUnit 转换问题
C# xUnit conversion issue when using InlineData
假设我有以下模型:
public class A
{
public decimal? Property { get; set; }
}
我想测试一种方法,取决于“属性”,将值作为参数传递。我认为这会起作用,但我并不感到惊讶,因为 InlineData 属性接受一个对象数组。
[Theory]
[InlineData(-10.0)]
[InlineData(0)]
[InlineData(null)]
public void Test(decimal? property)
{
var a = new A();
a.Property = property;
// Unit test logic
}
当运行测试时,它通过空值,但数值抛出“ArgumentException”异常:
System.ArgumentException : Object of type 'System.Double' cannot be
converted to type 'System.Nullable`1[System.Decimal]'.
我的问题是:在这种情况下是否可以使用 [Theory] 和 [InlineData]?或者我应该为每个人单独测试?
我找到了这个
第二个答案是一个似乎可行的解决方法,更改签名以接收 double?
,然后将其转换为 decimal?
[Theory]
[InlineData(-10.0)]
[InlineData(0)]
[InlineData(null)]
public void Test(double? property)
{
var a = new A();
a.Property = (decimal?) property;
// Unit test logic
}
您可以使用 M
将值声明为十进制,以将其声明为十进制文字。
[Theory]
[InlineData(-10.0M)]
[InlineData(0M)]
[InlineData(null)]
public void Test(decimal? property)
{
var a = new A();
a.Property = property;
// Unit test logic
}
假设我有以下模型:
public class A
{
public decimal? Property { get; set; }
}
我想测试一种方法,取决于“属性”,将值作为参数传递。我认为这会起作用,但我并不感到惊讶,因为 InlineData 属性接受一个对象数组。
[Theory]
[InlineData(-10.0)]
[InlineData(0)]
[InlineData(null)]
public void Test(decimal? property)
{
var a = new A();
a.Property = property;
// Unit test logic
}
当运行测试时,它通过空值,但数值抛出“ArgumentException”异常:
System.ArgumentException : Object of type 'System.Double' cannot be converted to type 'System.Nullable`1[System.Decimal]'.
我的问题是:在这种情况下是否可以使用 [Theory] 和 [InlineData]?或者我应该为每个人单独测试?
我找到了这个
第二个答案是一个似乎可行的解决方法,更改签名以接收 double?
,然后将其转换为 decimal?
[Theory]
[InlineData(-10.0)]
[InlineData(0)]
[InlineData(null)]
public void Test(double? property)
{
var a = new A();
a.Property = (decimal?) property;
// Unit test logic
}
您可以使用 M
将值声明为十进制,以将其声明为十进制文字。
[Theory]
[InlineData(-10.0M)]
[InlineData(0M)]
[InlineData(null)]
public void Test(decimal? property)
{
var a = new A();
a.Property = property;
// Unit test logic
}