В моем наборе тестов есть тест, который выглядит примерно так:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Этот тест работает так, как я ожидал, но когда я его запускаю, xUnit выводит предупреждение:
предупреждение xUnit2013: не используйте Assert.Equal () для проверки размера коллекции.
Однако в предупреждении не предлагается никакой альтернативы, и поиск в Google приводит меня к исходному коду в xUnit для теста, который проверяет, напечатано это предупреждение.
Если Assert.Equal()
это неправильный способ проверить длину коллекции, то какой?
Чтобы уточнить: я понимаю, что могу «обмануть» xUnit, чтобы он не выдавал это предупреждение, например, извлекая переменную или используя Assert.True(stuff.Count() == 1)
вместо нее. Последнее просто Hacky, и бывший чувствует , как если XUnit является , например , пытаясь избежать многократных итераций цикла IEnumerable<T>
, то это неправильный путь (потому что я буду получить подсказки компилятора о том , что по отдельности , если это проблема), и XUnit сам по себе никогда не должен оценивать ввод более одного раза (на самом деле он, вероятно, получит тот же ввод независимо от извлечения переменной из-за того, как работает вызов функций C #).
Итак, я не просто хочу удалить это предупреждение из моих выходных данных. Ответ на мой вопрос также объясняет, почему это предупреждение включено в библиотеку в первую очередь и почему любой подход, который я должен использовать вместо этого, лучше.
stuffCollection.Count()
в отдельной переменной и передаете ее в assert, выдает ли она ту же ошибку?