Basato su questa domanda sull'uso corretto di nUnit's TestCaseAttribute
, mi chiedevo se specificare il caso di test direttamente sull'implementazione o creare metodi di test (come quando si usa esplicitamente Assert.AreEqual
ecc.).
Nel seguito ho specificato degli esempi per entrambi gli approcci e ho anche elencato potenziali argomenti a favore e contro entrambi i casi a cui potevo pensare.
Specifica del test sull'implementazione
public class Math
{
[TestCase(1, 2, ExpectedResult = 3)]
public int Add(int a, int b)
{
return a + b;
}
}
Pro:
- Meno codice per scrivere
-
TestCase
funziona come documentazione
Contro:
- dovendo fare riferimento a
nunit.framework.dll
nel progetto di implementazione
Creazione di un metodo di prova
public class Math
{
public int Add(int a, int b)
{
return a + b;
}
}
public class MathTest
{
[TestCase(1, 2, ExpectedResult = 3)]
public int AddTest(int a, int b)
{
return new Math().Test(a, b);
}
}
Pro:
-
Non è necessario fare riferimento a
nunit.framework.dll
nel progetto di implementazione, solo nel progetto di test -
I test sono chiaramente separati dal codice che testano
Contro:
-
Duplicazione del codice: il metodo di prova ha esattamente la stessa firma dell'attuale implementazione ecc.
-
altro codice da scrivere
-
test non funziona più come una sorta di documentazione
Esistono altri argomenti a favore o contro uno degli approcci menzionati?
Quale approccio dovrei seguire? (come in quale approccio viene generalmente utilizzato, che è considerato "Better Practice"?)