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


у меня есть в моем тестовом наборе тест, который идет что-то вроде этого:

[Fact]
public void VerifySomeStuff()
{
    var stuffCollection = GetSomeStuff();

    Assert.Equal(1, stuffCollection.Count());
}

этот тест работает так, как я ожидаю, но когда я запускаю его xUnit печатает предупреждение:

предупреждение xUnit2013: не используйте Assert.Равно () для проверки размера коллекции.

однако в предупреждении не предлагается никакой альтернативы, и поиск google приводит меня к исходному коду в xUnit для теста, который проверяет, что это предупреждение напечатано.

если Assert.Equal() не правильный способ проверить длину коллекции, что такое?


чтобы уточнить: я понимаю, что я мог бы "обмануть" xUnit, чтобы не испускать это предупреждение, например, извлекая переменную или используя Assert.True(stuff.Count() == 1) вместо. Последний просто хаки, и первый чувствует, что если xUnit, например, пытается избежать нескольких итераций IEnumerable<T>, тогда это неправильный путь (потому что я получу подсказки компилятора об этом отдельно, если это проблема), и сам xUnit никогда не должен был оцените вход более одного раза (на самом деле он, вероятно, получит тот же вход независимо от извлечения переменной, из-за того, как работает вызов функции C#).

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

2 54

2 ответа:

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

xunit

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

У меня была такая же проблема, когда я использовал свойство Count, как показано ниже в xUnit.

enter image description here

после того, как я использую функцию Count() в коллекции, она исправила мою проблему.