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
クラスを使用しています。私は、次のことについて考えてきました:ファイル内
- 実行
- は、そのファイルを実行し、出力を保存することを、私は
- 保存をテストするサンプルプログラムのコードを生成します
- アサートに対するそのファイル
しかし、私はそれを行うより良い方法があるのだろうか?
それは知っているのは良いことです。そんなやり方でやるよ。私は、たくさんのテストの実行と、ディスク上のファイルの作成、読み込み、および削除のパフォーマンスについてちょっと心配していました。 –
@OscarMederos:パフォーマンスが十分でない場合は、(1)できるだけ遅いものを把握するためにプロファイリングするか、(2)すべてのチェックインでいくつかのテストを実行するようにテスト戦略を変更する、一晩中実行し、週末に実行するものもあります。そうすれば、迅速に問題を発見し、徹底したテストを行うことができます。 –