2010-11-21 7 views
2

コンパイルエラーを確認するためのテストを作成しようとしています。これは、スティングタイプのプロパティに数値を割り当てることです。しかし、それはコンパイルエラーであるため、ユニットテストコードは最初にコンパイルされません。だから誰にどのようにこれを行うにはどのような提案がありますか?コンパイルエラーを検証するための単体テストを書くにはどうすればよいですか?

私は多分実行時に番号を割り当てて、特定の例外がスローされたかどうかを確認できますか?しかし、私はどのようにしてそれを行うには決してよく分かりません。

ありがとうございます!

+2

どの言語ですか? – cdhowie

+0

コンパイルしてコンパイラに(コマンドラインから)フィードして、単体テストの結果を確認すべきであることがわかっているコードを生成することができます。しかし、私は通常、icyrock.comの答えに同意します。 – Steven

答えて

4

正しく理解すれば、コンパイルできないコードがいくつかあり、コードが実際にコンパイルされないと失敗する単体テストを書きたいと思っています。そうであれば、ユニットテストを書くべきではありません。あなたは、あなたのコードに対してのみ単体テストを書くべきであり、他の誰かが書いたコードではないことを理解するべきです。

あなたはプログラミング言語を指定していないので、いくつかの疑似コードを実行します。 2つの数字を追加する関数を書いているとします:

非常に単純です。これをユニットテストする必要があります。以下のようなテストを行うことによって:

function testAdd() { 
    assertEquals(4, add(2, 2)); 
    assertEquals(46, add(12, 34)); 
} 

をただし、+オペレータが正常に動作しているかどうかをテストするテストを書くべきではありません。これは、どのようにして+オペレータが実際に動作するかを実装するライブラリを書いた人の仕事です。

そのような場合は、単体テストを書かないでください。あなたのコードをコンパイルすることはあなたのコンパイラの仕事です。コンパイラは、適切な方法でコンパイルエラーが発生したことを報告する必要があります。コンパイラがその仕事を正しく実行しているかどうかテストするべきではありません。それは、コンパイラを書く人々の仕事です。

+0

あなたは正しいと思います。どうもありがとう! – Yinan

+0

いいえ、助けてうれしい! –

+0

(1)「コンパイラがそのジョブを正しく実行するかどうかをテストするべきではありません」言語仕様には実装定義の詳細が含まれる可能性があり、そのような詳細を活用すればチェックするのがクールです(2)あなたのプロジェクトの中の時間の仕組み - そして、あなたはそれをチェックしたいと思うかもしれません) – bruziuz

1

あなたは

  • ルビー、Pythonの言語を指定しなかった - ダイナミック&強い型システム。これは、実行時(動的)に推論される型が暗黙的に型間で変換されることを意味します。
  • Js、Perl - dynamic &弱い型システム。
  • C++ - 静的で強力な型システムです。

ここでは、C++について説明します。さらに私はもっと実際の例を作ることができます。あなたは、このようなメカニズムがうまく動作することを確認したい場合は++ 11コンパイラ

template <bool> 
struct my_static_assert; 

template <> 
struct my_static_assert<true> {}; 

cを使用していていないプロジェクトのstatic assertを実装することを想像してみてください。

  1. は、コンパイラの外部プロセスを作成し、コンパイラの処理完了のために、それは

  2. 待つためにテストコンパイル単位を渡すコンパイラにいくつかのファイルを作成します。あなたは次のステップを行う機能をunittestの作成する必要があります
  3. コンパイラプロセスからのリターンコードの取得
  4. 関数チェック戻りコード4から

Googleテストガイドを確認しましたが、そのようなコンセプトをサポートしていないようです。https://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide

関連する問題