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