Подтвердить что ты не робот

Какой идиоматический способ проверки размера коллекции в xUnit?

В моем тестовом наборе есть тест, который выглядит примерно так:

[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 никогда не должен оценивать ввод более одного раза (на самом деле он, вероятно, получит тот же вход, независимо от извлечения переменной, из-за того, как работает вызов функции С#).

Итак, я не просто заинтересован в том, чтобы удалить это предупреждение из моего вывода. Ответ на мой вопрос также объясняет, почему это предупреждение включено в библиотеку в первую очередь, и почему любой подход, который я должен использовать, лучше.

4b9b3361

Ответ 1

Xunit предлагает быстрые исправления для большинства своих предупреждений, поэтому вы должны уметь видеть, что он считает "правильным".

xunit

В вашем случае он хочет, чтобы вы использовали Assert.Single, так как вы ожидаете ровно один элемент. Если вы утверждаете произвольное число, например 412, то оно не даст вам предупреждения об использовании Count. Он будет предлагать использовать Single, если вы ожидаете один элемент, или Empty, если вы не ожидаете никаких элементов.