Piszę parser i jako część tego mam Expanderklasę, która „rozwija” jedną złożoną instrukcję w wiele prostych instrukcji. Na przykład rozwinąłby to:
x = 2 + 3 * a
w:
tmp1 = 3 * a
x = 2 + tmp1
Teraz zastanawiam się, jak przetestować tę klasę, a konkretnie jak zorganizować testy. Mógłbym ręcznie utworzyć wejściowe drzewo składni:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Lub mógłbym napisać go jako ciąg i przeanalizować:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
Druga opcja jest znacznie prostsza, krótsza i czytelna. Ale wprowadza także denpendencję Parser, co oznacza, że błąd w tym Parsermoże zakończyć się niepowodzeniem. Test przestałby być testem jednostkowym Expanderi wydaje mi się, że technicznie staje się testem integracyjnym Parseri Expander.
Moje pytanie brzmi: czy można polegać głównie (lub całkowicie) na tego rodzaju testach integracyjnych w celu przetestowania tej Expanderklasy?
Parsermoże się nie powieść w jakimś innym teście, nie stanowi problemu, jeśli zwykle popełniasz tylko błędy zerowe, przeciwnie, oznacza to, że masz większy zasięgParser. Wolałbym się martwić, że błądParsermoże sprawić, że test się powiedzie, gdy powinien się nie udać . W końcu testy jednostkowe służą do znajdowania błędów - test jest przerywany, kiedy nie, ale powinien.