Sto scrivendo un parser e come parte di ciò, ho una Expander
classe che "espande" singole istruzioni complesse in più istruzioni semplici. Ad esempio, espanderebbe questo:
x = 2 + 3 * a
in:
tmp1 = 3 * a
x = 2 + tmp1
Ora sto pensando a come testare questa classe, in particolare come organizzare i test. Potrei creare manualmente l'albero della sintassi di input:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Oppure potrei scriverlo come una stringa e analizzarlo:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
La seconda opzione è molto più semplice, più breve e leggibile. Ma introduce anche una negligenza Parser
, il che significa che un bug Parser
potrebbe non superare questo test. Quindi, il test smetterebbe di essere un unit test di Expander
, e immagino che tecnicamente diventi un test di integrazione di Parser
e Expander
.
La mia domanda è: va bene affidarsi principalmente (o completamente) a questo tipo di test di integrazione per testare questa Expander
classe?
Parser
possa fallire qualche altro test non è un problema se commetti abitualmente solo a zero fallimenti, al contrario significa che hai una copertura maggiore diParser
. Quello di cui preferirei preoccuparmi è che un bugParser
potrebbe far sì che questo test abbia successo quando avrebbe dovuto fallire . Dopotutto, i test unitari sono alla ricerca di bug: un test viene interrotto quando non lo è, ma dovrebbe esserlo.