【发布时间】:2012-03-22 15:34:25
【问题描述】:
我正在C# 中编写Tiger 编译器,并将Tiger 代码翻译成IL。
在我的 AST 中实现每个节点的语义检查时,我为此创建了许多单元测试。这很简单,因为我的CheckSemantic 方法如下所示:
public override void CheckSemantics(Scope scope, IList<Error> errors) {
...
}
所以,如果我想为某个节点的语义检查编写一些单元测试,我所要做的就是构建一个 AST,并调用该方法。然后我可以做类似的事情:
Assert.That(errors.Count == 0);
或
Assert.That(errors.Count == 1);
Assert.That(errors[0] is UnexpectedTypeError);
Assert.That(scope.ExistsType("some_declared_type"));
但我现在开始生成代码,我不知道在为那个阶段编写单元测试时有什么好的做法。
我正在使用ILGenerator 类。我想到了以下几点:
- 生成我要测试的示例程序的代码
- 将生成的代码另存为
test.exe - 执行
text.exe并将输出存储在results - 断言反对
results
但我想知道是否有更好的方法?
【问题讨论】:
标签: c# unit-testing compiler-construction compilation tiger