Googletest export
Create Assertions Reference PiperOrigin-RevId: 375824718
This commit is contained in:
413
docs/advanced.md
413
docs/advanced.md
@@ -15,71 +15,13 @@ assertions.
|
||||
|
||||
### Explicit Success and Failure
|
||||
|
||||
These three assertions do not actually test a value or expression. Instead, they
|
||||
generate a success or failure directly. Like the macros that actually perform a
|
||||
test, you may stream a custom failure message into them.
|
||||
|
||||
```c++
|
||||
SUCCEED();
|
||||
```
|
||||
|
||||
Generates a success. This does **NOT** make the overall test succeed. A test is
|
||||
considered successful only if none of its assertions fail during its execution.
|
||||
|
||||
{: .callout .note}
|
||||
NOTE: `SUCCEED()` is purely documentary and currently doesn't generate any
|
||||
user-visible output. However, we may add `SUCCEED()` messages to googletest's
|
||||
output in the future.
|
||||
|
||||
```c++
|
||||
FAIL();
|
||||
ADD_FAILURE();
|
||||
ADD_FAILURE_AT("file_path", line_number);
|
||||
```
|
||||
|
||||
`FAIL()` generates a fatal failure, while `ADD_FAILURE()` and `ADD_FAILURE_AT()`
|
||||
generate a nonfatal failure. These are useful when control flow, rather than a
|
||||
Boolean expression, determines the test's success or failure. For example, you
|
||||
might want to write something like:
|
||||
|
||||
```c++
|
||||
switch(expression) {
|
||||
case 1:
|
||||
... some checks ...
|
||||
case 2:
|
||||
... some other checks ...
|
||||
default:
|
||||
FAIL() << "We shouldn't get here.";
|
||||
}
|
||||
```
|
||||
|
||||
{: .callout .note}
|
||||
NOTE: you can only use `FAIL()` in functions that return `void`. See the
|
||||
[Assertion Placement section](#assertion-placement) for more information.
|
||||
See [Explicit Success and Failure](reference/assertions.md#success-failure) in
|
||||
the Assertions Reference.
|
||||
|
||||
### Exception Assertions
|
||||
|
||||
These are for verifying that a piece of code throws (or does not throw) an
|
||||
exception of the given type:
|
||||
|
||||
Fatal assertion | Nonfatal assertion | Verifies
|
||||
------------------------------------------ | ------------------------------------------ | --------
|
||||
`ASSERT_THROW(statement, exception_type);` | `EXPECT_THROW(statement, exception_type);` | `statement` throws an exception of the given type
|
||||
`ASSERT_ANY_THROW(statement);` | `EXPECT_ANY_THROW(statement);` | `statement` throws an exception of any type
|
||||
`ASSERT_NO_THROW(statement);` | `EXPECT_NO_THROW(statement);` | `statement` doesn't throw any exception
|
||||
|
||||
Examples:
|
||||
|
||||
```c++
|
||||
ASSERT_THROW(Foo(5), bar_exception);
|
||||
|
||||
EXPECT_NO_THROW({
|
||||
int n = 5;
|
||||
Bar(&n);
|
||||
});
|
||||
```
|
||||
|
||||
**Availability**: requires exceptions to be enabled in the build environment
|
||||
See [Exception Assertions](reference/assertions.md#exceptions) in the Assertions
|
||||
Reference.
|
||||
|
||||
### Predicate Assertions for Better Error Messages
|
||||
|
||||
@@ -99,59 +41,9 @@ googletest gives you three different options to solve this problem:
|
||||
|
||||
If you already have a function or functor that returns `bool` (or a type that
|
||||
can be implicitly converted to `bool`), you can use it in a *predicate
|
||||
assertion* to get the function arguments printed for free:
|
||||
|
||||
|
||||
| Fatal assertion | Nonfatal assertion | Verifies |
|
||||
| --------------------------------- | --------------------------------- | --------------------------- |
|
||||
| `ASSERT_PRED1(pred1, val1)` | `EXPECT_PRED1(pred1, val1)` | `pred1(val1)` is true |
|
||||
| `ASSERT_PRED2(pred2, val1, val2)` | `EXPECT_PRED2(pred2, val1, val2)` | `pred2(val1, val2)` is true |
|
||||
| `...` | `...` | `...` |
|
||||
|
||||
In the above, `predn` is an `n`-ary predicate function or functor, where `val1`,
|
||||
`val2`, ..., and `valn` are its arguments. The assertion succeeds if the
|
||||
predicate returns `true` when applied to the given arguments, and fails
|
||||
otherwise. When the assertion fails, it prints the value of each argument. In
|
||||
either case, the arguments are evaluated exactly once.
|
||||
|
||||
Here's an example. Given
|
||||
|
||||
```c++
|
||||
// Returns true if m and n have no common divisors except 1.
|
||||
bool MutuallyPrime(int m, int n) { ... }
|
||||
|
||||
const int a = 3;
|
||||
const int b = 4;
|
||||
const int c = 10;
|
||||
```
|
||||
|
||||
the assertion
|
||||
|
||||
```c++
|
||||
EXPECT_PRED2(MutuallyPrime, a, b);
|
||||
```
|
||||
|
||||
will succeed, while the assertion
|
||||
|
||||
```c++
|
||||
EXPECT_PRED2(MutuallyPrime, b, c);
|
||||
```
|
||||
|
||||
will fail with the message
|
||||
|
||||
```none
|
||||
MutuallyPrime(b, c) is false, where
|
||||
b is 4
|
||||
c is 10
|
||||
```
|
||||
|
||||
{: .callout .note}
|
||||
> NOTE:
|
||||
>
|
||||
> 1. If you see a compiler error "no matching function to call" when using
|
||||
> `ASSERT_PRED*` or `EXPECT_PRED*`, please see
|
||||
> [this](faq.md#the-compiler-complains-no-matching-function-to-call-when-i-use-assert_pred-how-do-i-fix-it)
|
||||
> for how to resolve it.
|
||||
assertion* to get the function arguments printed for free. See
|
||||
[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions
|
||||
Reference for details.
|
||||
|
||||
#### Using a Function That Returns an AssertionResult
|
||||
|
||||
@@ -242,157 +134,40 @@ Then the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print
|
||||
|
||||
#### Using a Predicate-Formatter
|
||||
|
||||
If you find the default message generated by `(ASSERT|EXPECT)_PRED*` and
|
||||
`(ASSERT|EXPECT)_(TRUE|FALSE)` unsatisfactory, or some arguments to your
|
||||
predicate do not support streaming to `ostream`, you can instead use the
|
||||
following *predicate-formatter assertions* to *fully* customize how the message
|
||||
is formatted:
|
||||
|
||||
Fatal assertion | Nonfatal assertion | Verifies
|
||||
------------------------------------------------ | ------------------------------------------------ | --------
|
||||
`ASSERT_PRED_FORMAT1(pred_format1, val1);` | `EXPECT_PRED_FORMAT1(pred_format1, val1);` | `pred_format1(val1)` is successful
|
||||
`ASSERT_PRED_FORMAT2(pred_format2, val1, val2);` | `EXPECT_PRED_FORMAT2(pred_format2, val1, val2);` | `pred_format2(val1, val2)` is successful
|
||||
`...` | `...` | ...
|
||||
|
||||
The difference between this and the previous group of macros is that instead of
|
||||
a predicate, `(ASSERT|EXPECT)_PRED_FORMAT*` take a *predicate-formatter*
|
||||
(`pred_formatn`), which is a function or functor with the signature:
|
||||
|
||||
```c++
|
||||
testing::AssertionResult PredicateFormattern(const char* expr1,
|
||||
const char* expr2,
|
||||
...
|
||||
const char* exprn,
|
||||
T1 val1,
|
||||
T2 val2,
|
||||
...
|
||||
Tn valn);
|
||||
```
|
||||
|
||||
where `val1`, `val2`, ..., and `valn` are the values of the predicate arguments,
|
||||
and `expr1`, `expr2`, ..., and `exprn` are the corresponding expressions as they
|
||||
appear in the source code. The types `T1`, `T2`, ..., and `Tn` can be either
|
||||
value types or reference types. For example, if an argument has type `Foo`, you
|
||||
can declare it as either `Foo` or `const Foo&`, whichever is appropriate.
|
||||
|
||||
As an example, let's improve the failure message in `MutuallyPrime()`, which was
|
||||
used with `EXPECT_PRED2()`:
|
||||
|
||||
```c++
|
||||
// Returns the smallest prime common divisor of m and n,
|
||||
// or 1 when m and n are mutually prime.
|
||||
int SmallestPrimeCommonDivisor(int m, int n) { ... }
|
||||
|
||||
// A predicate-formatter for asserting that two integers are mutually prime.
|
||||
testing::AssertionResult AssertMutuallyPrime(const char* m_expr,
|
||||
const char* n_expr,
|
||||
int m,
|
||||
int n) {
|
||||
if (MutuallyPrime(m, n)) return testing::AssertionSuccess();
|
||||
|
||||
return testing::AssertionFailure() << m_expr << " and " << n_expr
|
||||
<< " (" << m << " and " << n << ") are not mutually prime, "
|
||||
<< "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n);
|
||||
}
|
||||
```
|
||||
|
||||
With this predicate-formatter, we can use
|
||||
|
||||
```c++
|
||||
EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c);
|
||||
```
|
||||
|
||||
to generate the message
|
||||
|
||||
```none
|
||||
b and c (4 and 10) are not mutually prime, as they have a common divisor 2.
|
||||
```
|
||||
|
||||
As you may have realized, many of the built-in assertions we introduced earlier
|
||||
are special cases of `(EXPECT|ASSERT)_PRED_FORMAT*`. In fact, most of them are
|
||||
indeed defined using `(EXPECT|ASSERT)_PRED_FORMAT*`.
|
||||
If you find the default message generated by
|
||||
[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and
|
||||
[`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some
|
||||
arguments to your predicate do not support streaming to `ostream`, you can
|
||||
instead use *predicate-formatter assertions* to *fully* customize how the
|
||||
message is formatted. See
|
||||
[`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the
|
||||
Assertions Reference for details.
|
||||
|
||||
### Floating-Point Comparison
|
||||
|
||||
Comparing floating-point numbers is tricky. Due to round-off errors, it is very
|
||||
unlikely that two floating-points will match exactly. Therefore, `ASSERT_EQ` 's
|
||||
naive comparison usually doesn't work. And since floating-points can have a wide
|
||||
value range, no single fixed error bound works. It's better to compare by a
|
||||
fixed relative error bound, except for values close to 0 due to the loss of
|
||||
precision there.
|
||||
|
||||
In general, for floating-point comparison to make sense, the user needs to
|
||||
carefully choose the error bound. If they don't want or care to, comparing in
|
||||
terms of Units in the Last Place (ULPs) is a good default, and googletest
|
||||
provides assertions to do this. Full details about ULPs are quite long; if you
|
||||
want to learn more, see
|
||||
[here](https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/).
|
||||
|
||||
#### Floating-Point Macros
|
||||
|
||||
|
||||
| Fatal assertion | Nonfatal assertion | Verifies |
|
||||
| ------------------------------- | ------------------------------- | ---------------------------------------- |
|
||||
| `ASSERT_FLOAT_EQ(val1, val2);` | `EXPECT_FLOAT_EQ(val1, val2);` | the two `float` values are almost equal |
|
||||
| `ASSERT_DOUBLE_EQ(val1, val2);` | `EXPECT_DOUBLE_EQ(val1, val2);` | the two `double` values are almost equal |
|
||||
|
||||
|
||||
By "almost equal" we mean the values are within 4 ULP's from each other.
|
||||
|
||||
The following assertions allow you to choose the acceptable error bound:
|
||||
|
||||
|
||||
| Fatal assertion | Nonfatal assertion | Verifies |
|
||||
| ------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------- |
|
||||
| `ASSERT_NEAR(val1, val2, abs_error);` | `EXPECT_NEAR(val1, val2, abs_error);` | the difference between `val1` and `val2` doesn't exceed the given absolute error |
|
||||
|
||||
See [Floating-Point Comparison](reference/assertions.md#floating-point) in the
|
||||
Assertions Reference.
|
||||
|
||||
#### Floating-Point Predicate-Format Functions
|
||||
|
||||
Some floating-point operations are useful, but not that often used. In order to
|
||||
avoid an explosion of new macros, we provide them as predicate-format functions
|
||||
that can be used in predicate assertion macros (e.g. `EXPECT_PRED_FORMAT2`,
|
||||
etc).
|
||||
that can be used in the predicate assertion macro
|
||||
[`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for
|
||||
example:
|
||||
|
||||
```c++
|
||||
EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2);
|
||||
EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2);
|
||||
```
|
||||
|
||||
Verifies that `val1` is less than, or almost equal to, `val2`. You can replace
|
||||
`EXPECT_PRED_FORMAT2` in the above table with `ASSERT_PRED_FORMAT2`.
|
||||
The above code verifies that `val1` is less than, or approximately equal to,
|
||||
`val2`.
|
||||
|
||||
### Asserting Using gMock Matchers
|
||||
|
||||
gMock comes with a library of *matchers* for validating arguments passed to mock
|
||||
objects. A gMock matcher is basically a predicate that knows how to describe
|
||||
itself. It can be used in these assertion macros:
|
||||
|
||||
|
||||
| Fatal assertion | Nonfatal assertion | Verifies |
|
||||
| ------------------------------ | ------------------------------ | --------------------- |
|
||||
| `ASSERT_THAT(value, matcher);` | `EXPECT_THAT(value, matcher);` | value matches matcher |
|
||||
|
||||
|
||||
For example, `StartsWith(prefix)` is a matcher that matches a string starting
|
||||
with `prefix`, and you can write:
|
||||
|
||||
```c++
|
||||
using ::testing::StartsWith;
|
||||
...
|
||||
// Verifies that Foo() returns a string starting with "Hello".
|
||||
EXPECT_THAT(Foo(), StartsWith("Hello"));
|
||||
```
|
||||
|
||||
See
|
||||
[Using Matchers in googletest Assertions](gmock_cook_book.md#using-matchers-in-googletest-assertions)
|
||||
in the gMock Cookbook for more details. For a list of built-in matchers, see the
|
||||
[Matchers Reference](reference/matchers.md). You can also write your own
|
||||
matchers—see [Writing New Matchers Quickly](gmock_cook_book.md#NewMatchers).
|
||||
|
||||
gMock is bundled with googletest, so you don't need to add any build dependency
|
||||
in order to take advantage of this. Just include `"gmock/gmock.h"`
|
||||
and you're ready to go.
|
||||
See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions
|
||||
Reference.
|
||||
|
||||
### More String Assertions
|
||||
|
||||
@@ -400,8 +175,9 @@ and you're ready to go.
|
||||
you haven't.)
|
||||
|
||||
You can use the gMock [string matchers](reference/matchers.md#string-matchers)
|
||||
with `EXPECT_THAT()` or `ASSERT_THAT()` to do more string comparison tricks
|
||||
(sub-string, prefix, suffix, regular expression, and etc). For example,
|
||||
with [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string
|
||||
comparison tricks (sub-string, prefix, suffix, regular expression, and etc). For
|
||||
example,
|
||||
|
||||
```c++
|
||||
using ::testing::HasSubstr;
|
||||
@@ -413,24 +189,8 @@ using ::testing::MatchesRegex;
|
||||
|
||||
### Windows HRESULT assertions
|
||||
|
||||
These assertions test for `HRESULT` success or failure.
|
||||
|
||||
Fatal assertion | Nonfatal assertion | Verifies
|
||||
-------------------------------------- | -------------------------------------- | --------
|
||||
`ASSERT_HRESULT_SUCCEEDED(expression)` | `EXPECT_HRESULT_SUCCEEDED(expression)` | `expression` is a success `HRESULT`
|
||||
`ASSERT_HRESULT_FAILED(expression)` | `EXPECT_HRESULT_FAILED(expression)` | `expression` is a failure `HRESULT`
|
||||
|
||||
The generated output contains the human-readable error message associated with
|
||||
the `HRESULT` code returned by `expression`.
|
||||
|
||||
You might use them like this:
|
||||
|
||||
```c++
|
||||
CComPtr<IShellDispatch2> shell;
|
||||
ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application"));
|
||||
CComVariant empty;
|
||||
ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, empty, empty, empty));
|
||||
```
|
||||
See [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the
|
||||
Assertions Reference.
|
||||
|
||||
### Type Assertions
|
||||
|
||||
@@ -644,71 +404,12 @@ If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see
|
||||
|
||||
### How to Write a Death Test
|
||||
|
||||
googletest has the following macros to support death tests:
|
||||
GoogleTest provides assertion macros to support death tests. See
|
||||
[Death Assertions](reference/assertions.md#death) in the Assertions Reference
|
||||
for details.
|
||||
|
||||
Fatal assertion | Nonfatal assertion | Verifies
|
||||
------------------------------------------------ | ------------------------------------------------ | --------
|
||||
`ASSERT_DEATH(statement, matcher);` | `EXPECT_DEATH(statement, matcher);` | `statement` crashes with the given error
|
||||
`ASSERT_DEATH_IF_SUPPORTED(statement, matcher);` | `EXPECT_DEATH_IF_SUPPORTED(statement, matcher);` | if death tests are supported, verifies that `statement` crashes with the given error; otherwise verifies nothing
|
||||
`ASSERT_DEBUG_DEATH(statement, matcher);` | `EXPECT_DEBUG_DEATH(statement, matcher);` | `statement` crashes with the given error **in debug mode**. When not in debug (i.e. `NDEBUG` is defined), this just executes `statement`
|
||||
`ASSERT_EXIT(statement, predicate, matcher);` | `EXPECT_EXIT(statement, predicate, matcher);` | `statement` exits with the given error, and its exit code matches `predicate`
|
||||
|
||||
where `statement` is a statement that is expected to cause the process to die,
|
||||
`predicate` is a function or function object that evaluates an integer exit
|
||||
status, and `matcher` is either a gMock matcher matching a `const std::string&`
|
||||
or a (Perl) regular expression - either of which is matched against the stderr
|
||||
output of `statement`. For legacy reasons, a bare string (i.e. with no matcher)
|
||||
is interpreted as `ContainsRegex(str)`, **not** `Eq(str)`. Note that `statement`
|
||||
can be *any valid statement* (including *compound statement*) and doesn't have
|
||||
to be an expression.
|
||||
|
||||
As usual, the `ASSERT` variants abort the current test function, while the
|
||||
`EXPECT` variants do not.
|
||||
|
||||
{: .callout .note}
|
||||
> NOTE: We use the word "crash" here to mean that the process terminates with a
|
||||
> *non-zero* exit status code. There are two possibilities: either the process
|
||||
> has called `exit()` or `_exit()` with a non-zero value, or it may be killed by
|
||||
> a signal.
|
||||
>
|
||||
> This means that if *`statement`* terminates the process with a 0 exit code, it
|
||||
> is *not* considered a crash by `EXPECT_DEATH`. Use `EXPECT_EXIT` instead if
|
||||
> this is the case, or if you want to restrict the exit code more precisely.
|
||||
|
||||
A predicate here must accept an `int` and return a `bool`. The death test
|
||||
succeeds only if the predicate returns `true`. googletest defines a few
|
||||
predicates that handle the most common cases:
|
||||
|
||||
```c++
|
||||
::testing::ExitedWithCode(exit_code)
|
||||
```
|
||||
|
||||
This expression is `true` if the program exited normally with the given exit
|
||||
code.
|
||||
|
||||
```c++
|
||||
testing::KilledBySignal(signal_number) // Not available on Windows.
|
||||
```
|
||||
|
||||
This expression is `true` if the program was killed by the given signal.
|
||||
|
||||
The `*_DEATH` macros are convenient wrappers for `*_EXIT` that use a predicate
|
||||
that verifies the process' exit code is non-zero.
|
||||
|
||||
Note that a death test only cares about three things:
|
||||
|
||||
1. does `statement` abort or exit the process?
|
||||
2. (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status
|
||||
satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`)
|
||||
is the exit status non-zero? And
|
||||
3. does the stderr output match `matcher`?
|
||||
|
||||
In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it
|
||||
will **not** cause the death test to fail, as googletest assertions don't abort
|
||||
the process.
|
||||
|
||||
To write a death test, simply use one of the above macros inside your test
|
||||
function. For example,
|
||||
To write a death test, simply use one of the macros inside your test function.
|
||||
For example,
|
||||
|
||||
```c++
|
||||
TEST(MyDeathTest, Foo) {
|
||||
@@ -723,8 +424,8 @@ TEST(MyDeathTest, NormalExit) {
|
||||
EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success");
|
||||
}
|
||||
|
||||
TEST(MyDeathTest, KillMyself) {
|
||||
EXPECT_EXIT(KillMyself(), testing::KilledBySignal(SIGKILL),
|
||||
TEST(MyDeathTest, KillProcess) {
|
||||
EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL),
|
||||
"Sending myself unblockable signal");
|
||||
}
|
||||
```
|
||||
@@ -734,11 +435,23 @@ verifies that:
|
||||
* calling `Foo(5)` causes the process to die with the given error message,
|
||||
* calling `NormalExit()` causes the process to print `"Success"` to stderr and
|
||||
exit with exit code 0, and
|
||||
* calling `KillMyself()` kills the process with signal `SIGKILL`.
|
||||
* calling `KillProcess()` kills the process with signal `SIGKILL`.
|
||||
|
||||
The test function body may contain other assertions and statements as well, if
|
||||
necessary.
|
||||
|
||||
Note that a death test only cares about three things:
|
||||
|
||||
1. does `statement` abort or exit the process?
|
||||
2. (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status
|
||||
satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`)
|
||||
is the exit status non-zero? And
|
||||
3. does the stderr output match `matcher`?
|
||||
|
||||
In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it
|
||||
will **not** cause the death test to fail, as googletest assertions don't abort
|
||||
the process.
|
||||
|
||||
### Death Test Naming
|
||||
|
||||
{: .callout .important}
|
||||
@@ -810,32 +523,8 @@ limited syntax only.
|
||||
|
||||
### How It Works
|
||||
|
||||
Under the hood, `ASSERT_EXIT()` spawns a new process and executes the death test
|
||||
statement in that process. The details of how precisely that happens depend on
|
||||
the platform and the variable `::testing::GTEST_FLAG(death_test_style)` (which is
|
||||
initialized from the command-line flag `--gtest_death_test_style`).
|
||||
|
||||
* On POSIX systems, `fork()` (or `clone()` on Linux) is used to spawn the
|
||||
child, after which:
|
||||
* If the variable's value is `"fast"`, the death test statement is
|
||||
immediately executed.
|
||||
* If the variable's value is `"threadsafe"`, the child process re-executes
|
||||
the unit test binary just as it was originally invoked, but with some
|
||||
extra flags to cause just the single death test under consideration to
|
||||
be run.
|
||||
* On Windows, the child is spawned using the `CreateProcess()` API, and
|
||||
re-executes the binary to cause just the single death test under
|
||||
consideration to be run - much like the `threadsafe` mode on POSIX.
|
||||
|
||||
Other values for the variable are illegal and will cause the death test to fail.
|
||||
Currently, the flag's default value is
|
||||
**`"fast"`**.
|
||||
|
||||
1. the child's exit status satisfies the predicate, and
|
||||
2. the child's stderr matches the regular expression.
|
||||
|
||||
If the death test statement runs to completion without dying, the child process
|
||||
will nonetheless terminate, and the assertion fails.
|
||||
See [Death Assertions](reference/assertions.md#death) in the Assertions
|
||||
Reference.
|
||||
|
||||
### Death Tests And Threads
|
||||
|
||||
|
||||
Reference in New Issue
Block a user