MSTest - DataTestMethod 引发异常 System.ArgumentException:类型 'System.Decimal' 的对象无法转换为类型 'System.Double'

MSTest - DataTestMethod throws exception System.ArgumentException: Object of type 'System.Decimal' cannot be converted to type 'System.Double'

我在成功运行的 .NET Core 3.1 测试项目(使用 MSTest)中进行了简单的参数化单元测试。它看起来像这样:

[DataRow(0.5)]
[DataRow(-1.5)]
[DataTestMethod]
public void MyParameterizedTest(double value)
{
   ...
}

然而在将项目更新为.NET 5 后,测试失败,并抛出以下异常:

System.ArgumentException: Object of type 'System.Decimal' cannot be converted to type 'System.Double'.
  Stack Trace:
      at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
   at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)

我试过转换值,也试过使用 [DynamicData] 但同样的异常发生了。

作为最后的手段,我更改了测试以将字符串值转换回双精度值。它有效,但感觉“hacky”。​​

[DataRow("0.5")]
[DataRow("-1.5")]
[DataTestMethod]
public void MyParameterizedTest(string stringValue)
{
   var doubleValue = Convert.ToDouble(stringValue);
   ...
}

关于如何解决此问题的任何其他建议?

更新相关的 MSTest NuGet 程序包解决了这个问题,并且我能够使用 double 进行我原来的参数化测试。

我更新的 NuGet 包是:

  • Microsoft.NET.Test.Sdk(16.10.0 来自 16.5.0)
  • MSTest.TestAdapter(2.2.5 来自 2.1.0)
  • MSTest.TestFramework(2.2.5 来自 2.1.0)