我正在编写一个Tiger
编译器,C#
并将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
但我想知道是否有更好的方法?