MSTest — Метод проверки данных выдает систему исключений.Исключение ArgumentException: Объект типа ‘Система.Десятичная система «не может быть преобразована в тип».Двойной’

#c# #mstest

Вопрос:

У меня есть простой параметризованный модульный тест в тестовом проекте .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] , но произошло то же исключение.

В крайнем случае я изменил тест, чтобы преобразовать строковое значение обратно в двойное. Это работает, но кажется «халтурным».

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

Есть какие-либо другие предложения, как я могу решить эту проблему?

Ответ №1:

Обновление соответствующих пакетов MSTest NuGet решило эту проблему, и я смог запустить свой исходный параметризованный тест с использованием двойников.

Пакеты NuGet, которые я обновил, были:

  • Microsoft.NET.Test.Sdk (16.10.0 с 16.5.0)
  • МСТест.Адаптерное тестирование (2.2.5 с 2.1.0)
  • MSTest.Тестовая работа (2.2.5 с 2.1.0)