2017-02-05 9 views
1

私は自分のプロジェクトのテストをセットアップしようとしていますが、例外が無効になっており、アサートを定義してstd :: abortを呼び出すようにしました。 gtestとCatchの両方は、テストスイート全体を強制終了するので、std :: abortを呼び出す1つのテストでのみ失敗することができます。
私のプロジェクトは、テストプロジェクト/実行可能ファイルが参照するDLLにコンパイルされます。脇から:コード内のアサートを生き残るC++テストスイート

  1. 例外を有効にした私は失敗するアサーションに依存しないためにカスタムコンパイルターゲットを作成し、1
  2. リストラコードと同様に何かをすること
  3. 投げるアサート

他のオプションはありますか?私は設計/速度の問題のために例外を有効にしたくないと思う。はい、できます

1. Can I do testing without exceptions? 

+0

googletestはこれをサポートしています。死亡診断のための検索。 –

+0

アプリケーションが異常終了したことを示すデステストテスト。私がコードを構造化する方法は、事実上いつでも発生する可能性のあるエラーがいつでも中止されます。 – Vitali

+0

それはおそらくあまり良いデザインではありません。 –

答えて

0

は本当にここに二つの質問があります。 std::abortはあなたに十分な情報が得られない場合は、std::quick_exit

2. Can I keep the test suite going after a failure? 

を使用してエラーコードを返す試すことができますこれは本当にかつてとは何の関係もありません。何らかのエラーの後にテストスイートを続けることは、ゼロで割るか、スタックが壊れたような恐ろしい回復不可能な理由でプログラムがテストに失敗する可能性があるため、技術的な課題です。

テストスイートを実行し続ける唯一の方法は、テストを別々のプロセスで実行する場合です。

私のプロジェクトの1つでは、スイッチフラグがmainに設定されているため、プログラムがテストモードで実行され、特定のテストが実行されます。 bashスクリプトは〜100回のテストを繰り返します。

関連する問題