#expect #macro #test-macro #assert #result #test

expecting

Rust macros that test conditions without panicking

9 releases (5 breaking)

0.6.0 May 2, 2024
0.5.0 Apr 9, 2024
0.4.0 Jan 14, 2023
0.3.0 Jan 11, 2023
0.1.1 Dec 18, 2022

#184 in Testing

27 downloads per month
Used in muffin

MIT license

34KB
432 lines

Expecting

Crates.io Documentation Crates.io

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.

Examples

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.

expect_eq error

expect_contains error

See the docs for usage examples and more info.

Dependencies

~135KB