Imagine que existe um teste CRUD (criar, ler, atualizar, excluir) para um objeto carro.
É melhor ter
[Test, Order(1)]
{
Create
}
[Test, Order(2)]
{
Read
}
[Test, Order(3)]
{
Update
}
[Test, Order(4)]
{
Delete
}
ou
[Test]
{
Create
Read
Update
Delete
}
Ambas as formas funcionam, mas queria saber quais são os prós e os contras
Esta é uma daquelas questões que podem levar a respostas baseadas em opiniões, mas penso que pode ser respondida de forma bastante factual.
Ao escrever um teste, presume-se que é possível que ele falhe - caso contrário, por que escrevê-lo? Se falhar, você precisa saber o que deu errado. Supondo que você dê nomes significativos a todos os seus testes, a primeira abordagem lhe dirá, por exemplo, que a atualização falhou enquanto as outras três funcionaram. Isso está a seu favor.
Na segunda abordagem, você precisa adicionar mensagens que deixem claro o que falhou. Isso é um pequeno inconveniente, mas a última coisa que você quer é olhar o rastreamento da pilha para simplesmente saber qual dos quatro falhou.
Uma abordagem de compromisso é escrever desta forma.
Isto é, de fato, o que os veteranos do TDD geralmente sugerem. Se seus testes forem tão pequenos e simples quanto deveriam ser, o tempo extra necessário para repetir algumas ações deverá ser mínimo, com um custo muito inferior ao valor do tempo extra que você pode gastar para descobrir o que deu errado.
No NUnit, para maior frescor, você pode usar Assume.That para garantir que cada operação Create preliminar passe sem gerar erros extras.
Conforme apontado por @Ilya, sua primeira abordagem torna impossível executar um único teste sozinho. Ao tornar os testes independentes, evite esse problema.
Então... faça os testes independentes e autodocumentados. Todo o resto é na verdade uma questão de opinião. :-)