Using ASSERT and EXPECT in GoogleTest
While ASSERT_* macros cause termination of test case, EXPECT_* macros continue its evaluation. I would like to know which is the criteria to decide whether to use one or the other.
Solution 1:
Use ASSERT
when the condition must hold - if it doesn't the test stops right there. Use this when the remainder of the test doesn't have semantic meaning without this condition holding.
Use EXPECT
when the condition should hold, but in cases where it doesn't we can still get value out of continuing the test. (The test will still ultimately fail at the end, though.)
The rule of thumb is: use EXPECT
by default, unless you require something to hold for the remainder of the tests, in which case you should use ASSERT
for that particular condition.
This is echoed within the primer:
Usually
EXPECT_*
are preferred, as they allow more than one failures to be reported in a test. However, you should useASSERT_*
if it doesn't make sense to continue when the assertion in question fails.
Solution 2:
Use EXPECT_
when you
- want to report more than one failure in your test
Use ASSERT_
when
- it doesn't make sense to continue when the assertion fails
Since ASSERT_
aborts your function immediately if it fails, possible cleanup code is skipped.
Prefer EXPECT_
as your default.
Solution 3:
In addition to previous answers...
ASSERT_
does not terminate execution of the test case. It returns from whatever function is was used in. Besides failing the test case, it evaluates to return;
, and this means that it cannot be used in a function returning something other than void
. Unless you're fine with the compiler warning, that is.
EXPECT_
fails the test case but does not return;
, so it can be used inside functions of any return type.