ArgumentException Невозможно преобразовать Int32 в десятичное в тестовом параметре

1

Я создаю новый сервер интеграции, и я вижу, что тесты терпят неудачу со следующей ошибкой:

System.ArgumentException : Object of type 'System.Int32' cannot be converted to type 'System.Decimal'.

Эти тесты запускаются без проблем во многих других средах. Один из товарищей предложил мне посмотреть региональные настройки на новом компьютере. Настройки идентичны настройкам других сред.

Вот пример того, что я вижу:

    [TestCase(1, TestName = "SampleTest_ArgumentIsInt")] // this test fails
    [TestCase(1.0, TestName = "SampleTest_ArgumentIsDouble")] // this test passes
    public void ShouldBeOkay(decimal arg)
    {
        ...test stuff...
    }

Ошибка не связана с утверждением в тесте. Как указано в TestCase, когда аргумент однозначно является десятичным, исключение ArgumentException не происходит.

Вторая TestCase реализует уточнение. Но я хотел бы понять основную причину: почему ошибка возникает в одной среде, но ни в одном из других?

Спасибо заранее за любую помощь.


Каждый комментатор запрашивает здесь трассировку стека, которую сообщает Team City:

Test(s) failed. System.ArgumentException : Object of type 'System.Int32' cannot be converted to type 'System.Decimal'.
    at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
    at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
    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, Boolean skipVisibilityChecks)
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    at NUnit.Core.Reflect.InvokeMethod(MethodInfo method, Object fixture, Object[] args)
    at NUnit.Core.TestMethod.RunTestMethod(TestResult testResult)
    at NUnit.Core.TestMethod.doTestCase(TestResult testResult)
  • 0
    Показать полную трассировку стека исключений.
  • 0
    Есть ли значение в InnerException? nUnit использует Convert.ChangeType () nunit.org/index.php?p=testCase&r=2.5, который не генерирует ArgumentException.
Показать ещё 3 комментария
Теги:
unit-testing
nunit

1 ответ

0

Проблема была решена путем обновления NUnit до последней версии. Некоторое время я преследовал свой хвост, пока коллега не заметил, что версия NUnit на новом сервере была несколько версий старше последних, которые мы используем на всех наших других машинах CI.

В провальных тестах все использовались атрибуты тестового случая NUnit с параметрами [TestCase...], где NUnit передает аргументы в методы тестирования и при необходимости выполняет преобразование.

Спасибо комментаторам за то, что они нашли время, чтобы помочь.

Надеюсь, этот ответ поможет другим в решении одной и той же проблемы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню