Я пишу парсер і як частина цього у мене є Expander
клас, який "розширює" єдине складне висловлювання на кілька простих операторів. Наприклад, це розширить це:
x = 2 + 3 * a
в:
tmp1 = 3 * a
x = 2 + tmp1
Зараз я думаю про те, як протестувати цей клас, а саме про те, як упорядкувати тести. Я міг створити дерево введення синтаксису вручну:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Або я можу записати його як рядок і проаналізувати його:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
Другий варіант набагато простіший, коротший і читабельніший. Але він також вводить залежність від Parser
, що означає, що помилка Parser
може провалити цей тест. Отже, тест перестав би бути одиничним тестом Expander
, і я думаю, що технічно стає тестом інтеграції Parser
та Expander
.
Моє запитання: чи добре покластися (або повністю) на такі інтеграційні тести для тестування цього Expander
класу?
Parser
може вийти з ладу на якомусь іншому тесті, не є проблемою, якщо ви звично здійснюєте лише при нульових збоях, навпаки, це означає, що ви маєте більше покриттяParser
. Я б хотів би турбуватися про те, що помилкаParser
може зробити цей тест успішним, коли він мав би не вдатися . Зрештою, є тести, щоб знайти помилки - тест порушується, коли він не має, але повинен мати.