我正在编写一个解析器,作为其中的一部分,我有一个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
会使该测试成功。毕竟,单元测试可用于发现错误-测试在没有但应该有的时候就被破坏了。