C'è qualche valore nell'asserire valori prima di agire nei test unitari?

7

Ecco un oggetto psuedo stupido per illustrare il punto:

public class Testing
{
    public object MyUnderlyingObject = new object { Property = 44 };

    public MyPropertyWrapper
    {
        get
        {
            return MyUnderlyingObject.Property;
        }
        set
        {
            MyUnderyingObject.Property = value
        }
    }
}

Di fronte a situazioni come questa, mi piace scrivere test che affermano lo stato esistente, al fine di illustrare che il valore in prova è effettivamente cambiato. Ad esempio:

[TestMethod]
public void TestMyProperty()
{
    Testing tester = new Testing();                   // arrange
    Assert.AreEqual(44, MyUnderlyingObject.Property); // assert existing value
    tester.MyPropertyWrapper = 55;                    // act
    Assert.AreEqual(55, MyUnderlyingObject.Property); // assert value has changed
}

È solo uno spreco di codice e tempo di elaborazione?

    
posta Matt Thrower 08.02.2016 - 13:43
fonte

2 risposte

10

Stai testando due cose, quindi staresti meglio con due test:

[TestMethod]
public void TestingClass_CorrectlyInitialisesProperty()
{
    Testing tester = new Testing();                  
    Assert.AreEqual(44, MyUnderlyingObject.Property);
}

[TestMethod]
public void TestingClass_CorrectlyChangesPropertyViaSetter()
{
    Testing tester = new Testing();                  
    tester.MyPropertyWrapper = 55;                    

    Assert.AreEqual(55, MyUnderlyingObject.Property);
}
    
risposta data 08.02.2016 - 14:16
fonte
3

Dipende dal linguaggio di programmazione. In una lingua compilata, il tuo errore sopra

         MyUnderyingObject.Property = value;
                ^
                - missing "l" here

sarebbe stato catturato dal compilatore. In un linguaggio interpretato senza la convalida del sytnax, questo codice può essere controllato solo per la correttezza sintattica quando viene eseguito. Per questo ha perfettamente senso avere un test unitario per trovare questo bug.

(E sì, sono consapevole che questo errore di battitura probabilmente non è stato fatto intenzionalmente quando hai scritto la domanda. Per favore, lascia la domanda così com'è, dà un buon esempio di cosa potrebbe essere utile un test di questa unità). / p>     

risposta data 08.02.2016 - 14:03
fonte

Leggi altre domande sui tag