Estoy escribiendo un analizador sintético y, como parte de eso, tengo una Expander
clase que "expande" un enunciado complejo simple en múltiples enunciados simples. Por ejemplo, expandiría esto:
x = 2 + 3 * a
dentro:
tmp1 = 3 * a
x = 2 + tmp1
Ahora estoy pensando en cómo evaluar esta clase, específicamente cómo organizar las pruebas. Podría crear manualmente el árbol de sintaxis 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"))));
O podría escribirlo como una cadena y analizarlo:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
La segunda opción es mucho más simple, más corta y legible. Pero también introduce una dependencia Parser
, lo que significa que un error Parser
podría fallar en esta prueba. Entonces, la prueba dejaría de ser una prueba unitaria de Expander
, y supongo que técnicamente se convierte en una prueba de integración de Parser
y Expander
.
Mi pregunta es: ¿está bien confiar principalmente (o completamente) en este tipo de pruebas de integración para probar esta Expander
clase?
Parser
pueda fallar en alguna otra prueba no es un problema si habitualmente comete solo cero fallas, por el contrario, significa que tiene más coberturaParser
. De lo que preferiría preocuparme es que un errorParser
podría hacer que esta prueba tenga éxito cuando debería haber fallado . Las pruebas unitarias están ahí para encontrar errores, después de todo, una prueba se rompe cuando no es así, pero debería haberlo hecho.