Il valore atteso dovrebbe essere hardcoded nell'Assert

7

La mia preferenza personale sarebbe quella di usare una variabile, ma forse ci sono dei motivi contro questo? Non sono stato in grado di trovare alcuna risorsa che indichi i pro o i contro dell'utilizzo di uno di questi sull'altro.

Opzione 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));
  }
}

Opzione 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"));
  }
}

Forse è una differenza minore? Non sono sicuro, sembra meglio chiedere.

    
posta Erik Philips 12.02.2015 - 22:12
fonte

1 risposta

12

Personalmente preferisco usare [TestCase] dove gli input e gli output attesi sono tutti passati come argomenti alla funzione test, quando possibile:

[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));
      }
}

Esiste anche un modo per fare un qualche tipo di valore di ritorno specificato come argomento di TestCase nel caso di NUnit, ma non mi ricordo come funziona o che cos'è la sintassi.

In situazioni in cui non è possibile o non è appropriato passare i propri input e output come parametri, li definirei tutti in anticipo in modo da poter rapidamente eyeballare cosa si sta alimentando al test. Sono stato bruciato molte volte durante il debug di materiale a causa di un test fallito, solo per trovare un refuso nel mio input. Raggruppare tutto insieme rende le cose più facili da gestire.

    
risposta data 12.02.2015 - 22:21
fonte

Leggi altre domande sui tag