使用 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
}