私はパーサーを書いており、その一部として、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");
2番目のオプションは、はるかに単純で、短く、読みやすいです。ただし、に依存性が導入さParser
れるため、のバグParser
がこのテストに失敗する可能性があります。だから、テストはのユニットテストされて停止だろうExpander
、と私は、技術的の統合テストとなり推測Parser
とExpander
。
私の質問は、このExpander
クラスをテストするために、この種の統合テストにほとんど(または完全に)依存しても大丈夫ですか?
Parser
他のテストに失敗する可能性があることは、失敗が0の場合のみ習慣的にコミットする場合は問題ではありません。逆に、より多くのカバレッジがあることを意味しますParser
。私が心配しているのは、のバグParser
がこのテストが失敗するはずだったのに成功するかもしれないということです。結局のところ、バグを見つけるために単体テストがあります。テストは、あるべきではないのに壊れているはずです。