Las pruebas deben fallar solo por una razón, pero eso no siempre significa que solo debe haber una declaración Assert
. En mi humilde opinión es más importante mantener el patrón " Organizar, Actuar, Afirmar ".
La clave es que solo tiene una acción, y luego inspecciona los resultados de esa acción mediante afirmaciones. Pero es "Organizar, Actuar, Afirmar, Fin de la prueba ". Si está tentado de continuar con las pruebas realizando otra acción y más afirmaciones después, en su lugar, haga una prueba por separado.
Me complace ver varias declaraciones de afirmación que forman parte de las pruebas de la misma acción. por ejemplo
[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");
}
o
[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");
}
Usted podría combinarlos en una afirmación, pero eso es diferente de insistir en que debería o debe . No hay ninguna mejora al combinarlos.
por ejemplo El primero podría ser
Assert.IsTrue((10 < value) && (value < 100), "Value out of range");
Pero esto no es mejor: el mensaje de error es menos específico y no tiene otras ventajas. Estoy seguro de que puede pensar en otros ejemplos en los que la combinación de dos o tres afirmaciones (o más) en una gran condición booleana hace que sea más difícil de leer, más difícil de alterar y más difícil averiguar por qué falló. ¿Por qué hacer esto solo por el bien de una regla?
NB : el código que estoy escribiendo aquí es C # con NUnit, pero los principios se mantendrán con otros lenguajes y marcos. La sintaxis también puede ser muy similar.