エラーメッセージに__FILE__
と__LINE__
の情報をオプションとして含めることができるアサルトラッパーのユニットテスト用にGoogleテストを使用します。Google TestのASSERT_DEATH正規表現の末尾に一致する
void My_Assert (bool test)
{
#if USE_FILE_MACRO
std::cerr << "fatal error: false in file __FILE__ at line __LINE__\n"
#else
std::cerr << "fatal error: false\n"
#endif
throw std::runtime_error ("Fatal error");
}
は、私はファイルと行がが含まれていないであることを、この試験のために確保したいので、私は唯一のASSERT_DEATH
は「致命的なエラー:偽」に一致させたい、ではない「致命的なエラー:ファイルMY_FILEで偽。 cpp at 42行目」を参照してください。 これは私が始めているものです:私は、行の末尾に一致するようにドル記号を追加しようとした
ASSERT_DEATH(try {My_Assert (false);} catch (...){exit(1);}, "fatal error: false");
、それは「致命的なエラー:偽」に一致していません。私は\s
、[:space:]
の違う種類を試してみました。私は、ドキュメントを誤解している可能性があり、ドル記号はgtestの正規表現の行の終わりと一致しません:文が "文字列の終わりに一致する(各行の文字列ではない)"がadvanced guide hereにのみ適用されるかどうかはわかりませんWindows正規表現またはすべてのシステム。私は、LLVMバージョン7.3.0(clang-703.0.31)を使ってOSX用にコンパイルしています。
残念ながら、情報が不十分です。 1. [MCVE]を提供します。2.使用するターゲットプラットフォームとコンパイラのバージョンについていくつかの詳細を記入します。あなたの質問を改善してください!ところで、第1位でゼロ以外の終了値を持つプロセス_crash_を実行しますか? –
@πάνταῥεῖ 質問を詳細で更新しました。 テスト中の関数(My_Assert)はクラッシュしません。stderrにログを記録して例外をスローします。 – kslattery
'ASSERT_DEATH()'は正規表現が実際にチェックされる前に、プログラムがゼロ以外の終了コードで1位で終了することを期待しています。あなたはおそらくそれを間違って使用しています。 –