Estou testando um método que é gerar uma coleção de objetos de dados. Quero verificar se as propriedades dos objetos estão sendo definidas corretamente. Algumas das propriedades serão definidas para a mesma coisa; outros serão configurados para um valor que depende da sua posição na coleção. A maneira natural de fazer isso parece ser com um loop. No entanto, Roy Osherove recomenda fortemente o uso da lógica em testes de unidade ( Art of Unit Testing , 178). Ele diz:
Um teste que contém lógica geralmente está testando mais de uma coisa por vez, o que não é recomendado, porque o teste é menos legível e mais frágil. Mas a lógica de teste também adiciona complexidade que pode conter um bug oculto.
Os testes devem, como regra geral, ser uma série de chamadas de método sem fluxos de controle, nem mesmo
try-catch
e com chamadas de confirmação.
No entanto, não vejo nada de errado com meu design (de que outra forma você gera uma lista de objetos de dados, alguns dos quais dependem de onde estão na sequência em que estão? - não podem exatamente gerá-los e testá-los separadamente). Existe algo que não seja amigável ao teste com meu design? Ou estou sendo muito rigidamente dedicado aos ensinamentos de Osherove? Ou há alguma mágica secreta de teste de unidade que eu não conheço que contorna esse problema? (Estou escrevendo em C # / VS2010 / NUnit, mas procurando respostas independentes do idioma, se possível.)
in
), se o teste for "Frob foi adicionado com sucesso a uma coleção existente".
toString()
coleciono e comparo com o que deveria ser. Simples e funciona.