異なる言語間でどのようにテストしますか?
私のコンパイラはコードをソース言語からターゲット言語に翻訳します。(ソース言語) の入力と (ターゲット言語) の出力が実行されたときに、まったく同じ結果が得られるようにしたいと考えています。
現在、ソース入力を実行し、コンパイラを介して実行し、出力を実行し、結果を文字列比較するスクリプトがあります。物足りない感じがします (わずかなセマンティックの違いがテストの失敗の原因になります。「1.0」は「1」と等しくないため、テストは失敗するなど)。
異なる言語間でどのようにテストしますか?
私のコンパイラはコードをソース言語からターゲット言語に翻訳します。(ソース言語) の入力と (ターゲット言語) の出力が実行されたときに、まったく同じ結果が得られるようにしたいと考えています。
現在、ソース入力を実行し、コンパイラを介して実行し、出力を実行し、結果を文字列比較するスクリプトがあります。物足りない感じがします (わずかなセマンティックの違いがテストの失敗の原因になります。「1.0」は「1」と等しくないため、テストは失敗するなど)。
これは、標準アプリケーション (特に、データベースなどに接続するアプリケーション) の TDD とまったく違いはありません。アプリケーションを分離するために構成されたコンポーネントを単体テストできます。次に、上記のテストについては、最善の判断を使用して、コードを柔軟にするだけでなく、目的の動作を徹底的にテストするテストを作成する必要があります。
1 つの考えとしては、結果のコードが正しく出力されることを引き続きテストすることですが、アサートする出力ソース コードを構築するビルダー オブジェクトの背後にあるチェックを分離することです。例えば
With(int number)
{
_sourceString += number.ToString(<Assign formatting here>);
Return this;
}
この方法では、出力が変更された場合でも、1 つのビルダー メソッドで変更するだけで済みます。