Я пишу парсер і як частина цього у мене є 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може зробити цей тест успішним, коли він мав би не вдатися . Зрештою, є тести, щоб знайти помилки - тест порушується, коли він не має, але повинен мати.