web-dev-qa-db-ja.com

GoogleTestでASSERTとEXPECTを使用する

ASSERT_ *マクロはテストケースの終了を引き起こしますが、EXPECT_ *マクロは評価を継続します。どちらを使用するかを決定する基準はどれかを知りたいです。

38
martjno

条件mustが成立する場合-テストがそこで停止しない場合は、ASSERTを使用します。この条件を保持せずに、テストの残りの部分に意味的な意味がない場合に使用します。

条件shouldが保持される場合はEXPECTを使用しますが、保持されない場合は、テストの継続から値を取得できます。 (ただし、最終的にはテストは最終的に失敗します。)

経験則は次のとおりです。デフォルトでEXPECTを使用します。ただし、残りのテストのためにrequire何かを保持する場合は、ASSERTその特定の条件。


これは primer 内にエコーされます:

通常、EXPECT_*が推奨されます。テストで複数の障害を報告できるためです。ただし、問題のアサーションが失敗したときに続行する意味がない場合は、ASSERT_*を使用する必要があります。

44
GManNickG

使用する EXPECT_あなたが

  • テストで複数の失敗を報告したい

使用する ASSERT_ いつ

  • アサーションが失敗したときに続行することは意味がありません

ASSERT_は、機能が失敗した場合、すぐに機能を中止し、可能なクリーンアップコードはスキップされます。優先EXPECT_をデフォルトとして。

19
nabulke

以前の回答に加えて...

ASSERT_は、テストケースの実行を終了しません。使用された関数から返されます。テストケースに失敗するだけでなく、return;に評価されます。つまり、void以外を返す関数では使用できません。コンパイラの警告に問題がなければ、そうです。

EXPECT_はテストケースに失敗しますが、return;は失敗しないため、任意の戻り値型の関数内で使用できます。

5
Martin G

次のリンクを確認してください: GoogleTestを使用した効果的なC++テスト (スライド23)。 EXPECTとASSERTの使用に関する適切なガイドライン/アドバイスがあります。

3
ratkok