我在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