Expecting provides macros for testing conditions without panicking. The
expect_*
family of macros cause an early return of anyhow::Error
if the
expected condition is not met.
Macro | Description |
---|---|
expect!(condition) |
Expects condition to be true |
expect_eq!(a, b) |
Expects a == b |
expect_ne!(a, b) |
Expects a != b |
expect_some(option) |
Expects option to be Some(x) and returns x |
expect_some_eq(some_a, a) |
Expects some_a == Some(a) |
expect_none(option) |
Expects option to be None |
expect_ok(result) |
Expects result to be Ok(x) and returns x |
expect_err(result) |
Expects result to be Err(e) and returns e |
expect_contains(string, substr) |
Expects string to contain substr |
expect_contains(container, element) |
Expects container (e.g., Vec ) to contain element |
expect_empty(container) |
Expects container to have no elements. |
expect_empty(string) |
Expects string to have a length of zero. |
expect_not_empty(container) |
Expects container to have 1+ elements. |
expect_not_empty(string) |
Expects string to have non-zero length. |
This crate is especially helpful in async integration tests that involve
provisioning and tearing down resources; rather than struggle to catch panics,
you can simply use expect_*
instead of assert_*
to return Result
.
use expecting::expect_eq;
#[test]
fn passing_test() -> Result<()> {
expect_eq!(1, 1);
Ok(())
}
#[test]
fn failing_test() -> Result<()> {
expect_eq!(1, 2); // returns early
Ok(()) // won't be reached
}
The error message for a failed test includes the line number and detailed description of what went wrong.
See the docs for usage examples and more info.