Sono nuovo nel test delle unità. Negli ultimi due giorni sto pensando a testare i metodi non atomici con i test unitari. Quando ho bisogno di scrivere dei test per alcune semplici modalità di metodo atomico in modo abbastanza semplice - sto prendendo tutti gli scenari per questo metodo che posso immaginare, e rifare ognuno di essi in unit test.
E se avessi metodi che chiamano altri metodi? Devo testare ogni scenario per il metodo testato E ogni metodo sta chiamando?
Forse alcuni esempi saranno più facili da capire:
public int makeSomeOperation(int a, int b)
{
if (a < 0)
throw new ArgumentException("a must be greater that 0");
if (b == 0)
throw new ArgumentException("b cannot be 0");
return a/b;
}
public bool SomeNonatomicMethod(int number)
{
if (number * number % 2 == 1)
return false;
int secondNumber = getNumberFromMordor();
int result = makeSomeOperation(number, secondNumber);
if (result == "123")
return true;
return false;
}
In questo caso, makeSomeOperation
è facile da testare: un test per ogni eccezione, uno per verificare che il risultato di ritorno sia uguale alle aspettative.
Ma che ne è di SomeNonatomicMethod? Ho dovuto scrivere non solo test per ogni caso in questo metodo (quindi: potenza del numero è dispari, il risultato è uguale a 123, e il risultato è diverso), ma anche ogni possibile flusso di cose che possono accadere in getNumberFromMordor
e makeSomeOperation
?
Le cose che possono accadere in makeSomeOperation
sono già testate, quindi dovrebbero essere testate la seconda volta?