Facciamo un esempio di classe con 3 dipendenze e un metodo.
class Example
{
private readonly IDependency1 _d1;
private readonly IDependency2 _d2;
private readonly IDependency3 _d3;
public Example(IDependency1 d1, IDependency2 d2, IDependency3 d3)
{
_d1 = d1 ?? throw new ArgumentNullException(nameof(d1));
_d2 = d2 ?? throw new ArgumentNullException(nameof(d2));
_d3 = d3 ?? throw new ArgumentNullException(nameof(d3));
}
public string Method(string parameter)
{
if(parameter == null)
throw new ArgumentNullException(nameof(parameter));
return ...
}
}
TDD suggerisce di testare praticamente tutto. Quindi ci dovrebbero essere 3 test che si aspettino ArgumentNullException per ogni dipendenza del costruttore. Inoltre un test per il metodo quando il parametro passato è nullo. Questi test non mi sembrano molto vantaggiosi e richiedono una quantità di tempo non nulla. Quindi la mia domanda è. Vale veramente la pena testare per ArgumentNullExceptions?
L'altra domanda è. Quando sono utili a tutti questi controlli? Non sarebbe meglio avere solo la documentazione che dice che i parametri metodo / costruttore passati non devono essere nulli? E non è ovviamente per quanto riguarda le dipendenze dal costruttore? E l'altro problema è: supponiamo che chiamo metodi come questo in un sistema funzionante testato . Questi controlli non rallenterebbero inutilmente le cose (supponendo che praticamente ogni metodo controlli gli argomenti nulli)?