Update docs for REQUIRE_THROWS_MATCHES

This commit is contained in:
Martin Hořeňovský 2024-07-27 14:01:47 +02:00
parent 85b7f3d6ab
commit a40dd478f3
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
1 changed files with 27 additions and 9 deletions

View File

@ -210,15 +210,36 @@ The other miscellaneous matcher utility is exception matching.
#### Matching exceptions #### Matching exceptions
Catch2 provides a utility macro for asserting that an expression Because exceptions are a bit special, Catch2 has a separate macro for them.
throws exception of specific type, and that the exception has desired
properties. The macro is `REQUIRE_THROWS_MATCHES(expr, ExceptionType, Matcher)`.
The basic form is
```
REQUIRE_THROWS_MATCHES(expr, ExceptionType, Matcher)
```
and it checks that the `expr` throws an exception, that exception is derived
from the `ExceptionType` type, and then `Matcher::match` is called on
the caught exception.
> `REQUIRE_THROWS_MATCHES` macro lives in `catch2/matchers/catch_matchers.hpp` > `REQUIRE_THROWS_MATCHES` macro lives in `catch2/matchers/catch_matchers.hpp`
For one-off checks you can use the `Predicate` matcher above, e.g.
Catch2 currently provides two matchers for exceptions. ```cpp
These are: REQUIRE_THROWS_MATCHES(parse(...),
parse_error,
Predicate<parse_error>([] (parse_error const& err) -> bool { return err.line() == 1; })
);
```
but if you intend to thoroughly test your error reporting, I recommend
defining a specialized matcher.
Catch2 also provides 2 built-in matchers for checking the error message
inside an exception (it must be derived from `std::exception`):
* `Message(std::string message)`. * `Message(std::string message)`.
* `MessageMatches(Matcher matcher)`. * `MessageMatches(Matcher matcher)`.
@ -236,10 +257,7 @@ REQUIRE_THROWS_MATCHES(throwsDerivedException(), DerivedException, Message("De
REQUIRE_THROWS_MATCHES(throwsDerivedException(), DerivedException, MessageMatches(StartsWith("DerivedException"))); REQUIRE_THROWS_MATCHES(throwsDerivedException(), DerivedException, MessageMatches(StartsWith("DerivedException")));
``` ```
Note that `DerivedException` in the example above has to derive from > the exception message matchers live in `catch2/matchers/catch_matchers_exception.hpp`
`std::exception` for the example to work.
> the exception message matcher lives in `catch2/matchers/catch_matchers_exception.hpp`
### Generic range Matchers ### Generic range Matchers