#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)