Os testes devem falhar apenas por um motivo, mas isso nem sempre significa que deve haver apenas uma instrução Assert
. IMHO é mais importante manter o padrão " Organizar, Agir, Declarar ".
A chave é que você tem apenas uma ação e, em seguida, inspeciona os resultados dessa ação usando as afirmações. Mas é "Organizar, Agir, Assert, Fim do teste ". Se você estiver tentado a continuar testando, realizando outra ação e mais declarações depois, faça um teste separado.
Fico feliz em ver várias instruções de declaração que formam partes do teste da mesma ação. por exemplo,
[Test]
public void ValueIsInRange()
{
int value = GetValueToTest();
Assert.That(value, Is.GreaterThan(10), "value is too small");
Assert.That(value, Is.LessThan(100), "value is too large");
}
ou
[Test]
public void ListContainsOneValue()
{
var list = GetListOf(1);
Assert.That(list, Is.Not.Null, "List is null");
Assert.That(list.Count, Is.EqualTo(1), "Should have one item in list");
Assert.That(list[0], Is.Not.Null, "Item is null");
}
Você poderia combiná-los em uma declaração, mas isso é diferente de insistir que você deveria ou deve . Não há melhorias em combiná-los.
por exemplo. O primeiro poderia ser
Assert.IsTrue((10 < value) && (value < 100), "Value out of range");
Mas isso não é melhor - a mensagem de erro é menos específica e não tem outras vantagens. Tenho certeza que você pode pensar em outros exemplos em que combinar duas ou três (ou mais) afirmações em uma grande condição booleana torna mais difícil a leitura, mais difícil de alterar e mais difícil descobrir por que ela falhou. Por que isso apenas por uma regra?
NB : O código que estou escrevendo aqui é o C # com o NUnit, mas os princípios serão mantidos em outras linguagens e frameworks. A sintaxe pode ser muito semelhante também.