Вывод дополнительной информации при сбое тестов

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

введите здесь описание изображения

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

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

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

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

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

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

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


person Gqqnbig    schedule 06.06.2018    source источник
comment
Если вы утверждаете в тесте только одно - название теста можно сделать более информативным: Should merge two wildcards.   -  person Fabio    schedule 06.06.2018


Ответы (1)


Если вы хотите увидеть фактическое содержимое списка для целей отладки и используете 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.

person Dennis Doomen    schedule 06.06.2018