En caso de que el valor esperado esté codificado en el Assert

7

Mi propia preferencia personal sería usar una variable, pero ¿tal vez hay razones en contra de esto? No he podido encontrar ningún recurso que indique las ventajas o desventajas de usar uno de estos sobre el otro.

Opción 1:

[TestClass]
public PersonAgeTest
{
  [Test]
  public void GetFullNameWithPrefix_Parameterless_ReturnsValueWithPrefix
  {
    // Arrange
    var person = new person(Gender.Male);
    var person.LastName = "Philips";
    var expected = "Mr. Philips";

    // Act
    var actual = person.GetSalutation(); 

    // Assert
    Assert.That(actual, Is.EqualTo(expected));
  }
}

Opción 2:

[TestClass]
public PersonAgeTest
{
  [Test]
  public void GetFullNameWithPrefix_Parameterless_ReturnsValueWithPrefix
  {
    // Arrange
    var person = new person(Gender.Male);
    var person.LastName = "Philips";

    // Act
    var actual = person.GetSalutation(); 

    // Assert
    Assert.That(actual, Is.EqualTo("Mr. Philips"));
  }
}

¿Quizás es una diferencia demasiado pequeña? No estoy seguro, parece mejor preguntar.

    
pregunta Erik Philips 12.02.2015 - 22:12

1 respuesta

12

Personalmente, prefiero usar [TestCase] donde la entrada y las salidas esperadas se pasan como argumentos a la función de prueba, siempre que sea posible:

[TestClass]
public class PersonAgeTest
{
    [TestCase("Philips","Mr. Phillips")]  
    public void GetFullNameWithPrefix_SimpleValue_ReturnsValueWithPrefix(string input, string expected)
      {
          // Arrange
          var person = new person(Gender.Male);
          var person.LastName = input;

          // Act
          var actual = person.GetSalutation();

          // Assert
          Assert.That(actual, Is.EqualTo(expected));
      }
}

Incluso hay una manera de hacer algún tipo de valor de retorno específico como tus argumentos de TestCase en el caso de NUnit, pero no recuerdo de la cabeza cómo funciona eso o qué es la sintaxis.

En situaciones en las que no puede o no es apropiado pasar sus entradas y salidas como parámetros, los definiría por adelantado para que pueda ver rápidamente lo que está alimentando a su prueba. Me he quemado muchas veces depurando cosas debido a un caso de prueba fallido, solo para encontrar un error tipográfico en mi entrada. Agrupar todo eso en conjunto hace que las cosas sean más fáciles de tratar.

    
respondido por el whatsisname 12.02.2015 - 22:21

Lea otras preguntas en las etiquetas