Вывод дополнительной информации при сбое тестов - PullRequest
0 голосов
/ 06 июня 2018

Один из моих тестов, содержащий Assert.Equal(2, list.Count);, не пройден на Appveyor, сервере непрерывной интеграции, но я не могу воспроизвести сбой на моей локальной машине.

enter image description here

Я надеюсь получить дополнительную информацию из сообщения об ошибке, но не знаю, как это сделать.

АвторыxUnit.net настаивает на том, что они не должны позволять пользователям указывать пользовательские сообщения об ошибках, см. https://github.com/xunit/xunit/issues/350.Вот почему нет API, позволяющего мне писать, например.Assert.Equal(2, list.Count, "The content of the list is " + ...);

Я также посмотрел на Свободные утверждения.Если я напишу list.Should().HaveCount(3, "the content of the list is " + ...);, вывод будет выглядеть как

Ожидаемая коллекция будет содержать 3 элемента (ов), потому что содержимое списка
..., но найдено 2.

Предложение «потому что» не имеет смысла в грамматике английского языка.Кажется, что параметр Потому что используется для описания ожидаемого поведения, а не фактического поведения.

Учитывая, что xUnit.net и Fluent Assertions оба отговаривают нас от предоставления дополнительной информации о сбое, выводит дополнительную информацию, когда тесты дают хороший результат.отлаживать удаленные ошибки?

Каков наилучший способ вывода дополнительной информации?

1 Ответ

0 голосов
/ 06 июня 2018

Если вы хотите просмотреть фактическое содержимое списка для целей отладки и используете Fluent Assertions, вы можете сделать это:

using (new AssertionScope(Formatter.ToString(list)) { list.Should().HaveCount(3); }

Область утверждений будет замененаcollection часть сообщения с чем-то другим.Это не приятно, но будет работать.

В качестве альтернативы, вы можете использовать параметр because следующим образом:

list.Should().HaveCount(3, "because I expected list {0} to contain that many items", list);

FA будет форматировать каждый заполнитель в , потому что фраза, используятот самый Formatter.String.

...