J'écris un analyseur et dans le cadre de cela, j'ai une Expander
classe qui "développe" une seule instruction complexe en plusieurs instructions simples. Par exemple, cela développerait ceci:
x = 2 + 3 * a
dans:
tmp1 = 3 * a
x = 2 + tmp1
Maintenant, je réfléchis à la façon de tester cette classe, en particulier comment organiser les tests. Je pouvais créer manuellement l'arbre de syntaxe d'entrée:
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 je pourrais l'écrire sous forme de chaîne et l'analyser:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
La deuxième option est beaucoup plus simple, plus courte et plus lisible. Mais il introduit également une dépendance sur Parser
, ce qui signifie qu'un bogue dans Parser
pourrait échouer ce test. Donc, le test cesserait d'être un test unitaire de Expander
, et je suppose que techniquement devient un test d'intégration de Parser
et Expander
.
Ma question est: est-il acceptable de s'appuyer principalement (ou complètement) sur ce type de tests d'intégration pour tester cette Expander
classe?
Parser
puisse échouer dans un autre test n'est pas un problème si vous ne vous engagez habituellement qu'à zéro échec, au contraire, cela signifie que vous avez plus de couvertureParser
. Ce qui m'inquiète plutôt, c'est qu'un bogue dansParser
pourrait faire réussir ce test alors qu'il aurait dû échouer . Les tests unitaires sont là pour trouver des bugs, après tout - un test est cassé quand il ne le fait pas mais aurait dû.