我在C#
中编写了Tiger
编译器,我打算将Tiger
代码翻译为IL
。在我的编译器中编写单元测试(生成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
类。我想到了以下几点:
- 生成我想测试
- 保存该可执行文件
- 执行该文件,并输出存储在一个文件
- 反对断言示例程序的代码该文件
但我想知道是否有更好的方法呢?
很高兴知道这一点。那么我会这样做。我只是担心很多正在运行的测试的性能,以及在磁盘上创建,读取和删除文件。 – 2012-03-05 06:16:09
@OscarMederos:如果性能不够好,那么要么(1)分析找出什么是缓慢的,如果可以的话修复它,或者(2)改变你的测试策略,以便在每次签入时运行一些测试,一夜之间跑步,有些跑周末。这样,您就可以快速发现问题并进行彻底的测试。 – 2012-03-05 14:51:02