Деревья выражений поблочного тестирования

Попробуйте это:

context.HttpContext.Response.StatusCode = 504;
11
задан Community 17 March 2017 в 14:01
поделиться

1 ответ

Исходя из опубликованного вами кода,

  • ожидаемое значение - анонимный делегат / метод. CLR делает немного магии за сценой, чтобы добавить метод на лету. В случае анона. Метод использует определенные локальные переменные, CLR создает новый класс с полями, для которых установлены эти значения, с новым методом anon внутри него (чтобы метод мог получить доступ к локальным значениям var). Так что это ваш ..c_DisplayClass13, с компилятором, которому присвоено странное имя, чтобы он не конфликтовал с пользовательскими методами.
  • Фактическим значением, возвращаемым вашим методом, является выражение .

​​И следовательно .. проверка на равенство между этими двумя не удалась. Вам нужно сравнить элементы коллекции, возвращенные обоими. Так что я бы предложил .. преобразуйте как ожидаемые, так и фактические значения в списки (или лучшую структуру данных), а затем вызовите одно из утверждений NUnit, которые принимают параметры сбора.

Обновление : вы заставили меня прочитать деревья выражений. +1 за это.
Я собираюсь изменить свой ответ - Сравнение деревьев выражений с помощью метода взлома и утверждения может привести к хрупкому тесту (например, если MS изменит внутреннюю структуру дерева выражений в будущем)
Деревья выражений - это просто блоки кода (как я выяснил сейчас), которые оценивают результат, аналогичный Func - поэтому мой тест должен был бы дать ожидаемым и фактическим кодовым блокам один и тот же ввод и посмотреть, если они доставляют одинаковый результат. Таким образом, мое утверждение для вашего теста будет

Assert.AreEqual(expected.Compile().Invoke(inputEntity), 
                actual.Compile().Invoke(inputEntity));
16
ответ дан 3 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: