Eu tenho em meu conjunto de testes um teste mais ou menos assim:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Este teste funciona como eu esperava, mas quando eu o executo, o xUnit imprime um aviso:
aviso xUnit2013: Não use Assert.Equal () para verificar o tamanho da coleção.
No entanto, nenhuma alternativa é sugerida no aviso, e uma pesquisa no Google me leva ao código-fonte em xUnit para o teste que verifica se esse aviso foi impresso.
Se Assert.Equal()
não é a maneira correta de verificar o comprimento de uma coleção, qual é?
Para esclarecer: eu percebi que poderia "enganar" o xUnit para não emitir esse aviso, por exemplo, extraindo uma variável ou usando Assert.True(stuff.Count() == 1)
. O último é apenas hacky, e o primeiro parece que se o xUnit está, por exemplo, tentando evitar múltiplas iterações de um IEnumerable<T>
, então este é o caminho errado a seguir (porque vou obter dicas do compilador sobre isso separadamente se for um problema), e xUnit em si nunca deve ter que avaliar a entrada mais de uma vez (na verdade, provavelmente obterá a mesma entrada, independentemente da extração de variável, por causa de como funciona a chamada de função C #).
Portanto, não estou apenas interessado em remover esse aviso de minha saída. Uma resposta à minha pergunta também explica por que esse aviso está incluído na biblioteca em primeiro lugar e por que qualquer abordagem que eu deveria usar é melhor.
stuffCollection.Count()
em uma variável separada e passá-la para o assert, terá o mesmo erro?