Primeiro, desculpas pelo título, não consegui pensar na maneira mais fácil de explicar!
Eu tenho um método para o qual quero escrever testes de unidade. Vou mantê-lo bastante genérico, pois não quero discutir a implementação do método, apenas o teste. O método é:
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
Portanto, essa classe possui um método público que chama alguns métodos privados para executar a lógica.
Então, ao escrever o teste de unidade, quero verificar se as três coisas foram feitas. Como todos são chamados na mesma execução, pensei que poderia fazê-lo como um teste:
public void GivenItem_WhenRun_Thenxxxxx
{
HandleItem(item);
// Assert item has been created
// Assert status has been set on the previous item
// Assert run date has been set
}
Mas achei que também poderia escrever como três testes separados:
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
Então, para mim, isso parece mais agradável, pois essencialmente lista os requisitos, mas todos os três estão relacionados e exigem exatamente o mesmo trabalho realizado no método testado, por isso estou executando o mesmo código três vezes.
Existe uma abordagem recomendada para levar com isso?
obrigado