Estou escrevendo um analisador e, como parte disso, tenho uma Expander
classe que "expande" uma única instrução complexa em várias instruções simples. Por exemplo, expandiria isso:
x = 2 + 3 * a
para dentro:
tmp1 = 3 * a
x = 2 + tmp1
Agora, estou pensando em como testar esta classe, especificamente em como organizar os testes. Eu poderia criar manualmente a árvore de sintaxe de entrada:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Ou eu poderia escrever como uma string e analisá-la:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
A segunda opção é muito mais simples, mais curta e legível. Mas também introduz uma denpendência Parser
, o que significa que um erro Parser
pode falhar neste teste. Então, o teste deixaria de ser um teste de unidade de Expander
, e eu acho que tecnicamente se torna um teste de integração de Parser
e Expander
.
Minha pergunta é: é bom confiar principalmente (ou completamente) nesse tipo de teste de integração para testar essa Expander
classe?
Parser
poder falhar em algum outro teste não é um problema se você normalmente comprometer apenas com zero falhas, pelo contrário, significa que você tem mais coberturaParser
. O que eu preferiria me preocupar é que um bugParser
poderia fazer esse teste ser bem - sucedido quando deveria ter falhado . Afinal, os testes de unidade existem para encontrar bugs - um teste é interrompido quando não existe, mas deveria ter.