Múltiplas declarações em um teste de unidade [duplicado]
Esta pergunta já tem uma resposta aqui:
É uma prática ruim ter mais de uma afirmação em um teste de unidade? [fechadas 9 respostasAcabei de ler "The Art of Unit Testing", de Roy Osherove, e estou tentando aderir às melhores práticas que ele expõe no livro. Uma dessas práticas recomendadas é não usar várias declarações em um método de teste. A razão para esta regra é bastante clara para mim, mas me faz pensar ...
Se eu tiver um método como:
public Foo MakeFoo(int x, int y, int z)
{
Foo f = new Foo();
f.X = x;
f.Y = y;
f.Z = z;
return f;
}
Devo realmente escrever testes de unidade individuais para afirmar que cada propriedade separada do Foo é inicializada com o valor fornecido? É realmente muito incomum usar várias declarações em um método de teste?
FYI: Estou usando o MSTest.
EDIT: Obrigado por todas as respostas. Acho que vou terminar com as várias afirmações. Na minha situação, o comportamento que está sendo testado é que o MakeFoo produz um Foo adequado. Portanto, afirmar que cada propriedade está obtendo o valor esperado deve ser suficiente. No entanto, se houvesse uma condição para definir uma das propriedades, testaria cada um dos resultados individuais separadament
Eu ainda não gosto disso ... O motivo pelo qual eu gosto da ideia de ter uma afirmação por teste é que você sabe exatamente o motivo pelo qual um teste falhou. Se você corrigir o problema, o teste será aprovado. Com várias afirmações, você não tem a mesma garantia. Se você corrigir o problema mencionado pela afirmação com falha, não há nada para impedir que outra afirmação posteriormente no teste falhe a seguir. Se as declarações fossem divididas, você saberia sobre as duas falhas desde o iníci
E finalmente, a razão pela qual não estou usando apenas .Equals () é porque, na minha situação, Foo é uma entidade LINQ-To-SQL que apresenta algumas complicações que não valem a pena entrar aqui.
Agradeço mais uma vez