#rstest #tracing #framework #tokio #async #streamlines

edtest

Streamlines the use of rstest with tracing and support for async tests with the tokio framework

1 unstable release

new 0.1.0 Mar 8, 2025

#345 in Testing

Download history 50/week @ 2025-03-02

53 downloads per month

MIT/Apache

9KB

Easy Desktop Test

The crate streamlines the use of rstest with support for tracing (using test-log). async tests are supported using the tokio framework.

The crate re-exports the assertions from static-assertions, and the #[serial] attribute of serial_test for pure convenience.

Usage

Unfortunately, due to the nature of macros, besides this crate the user still needs a few dev-dependencies:

cargo.toml:

[dev-dependencies]
edtest = ...
rstest = ...
test-log = ...
# Only needed if using the #[serial] attribute to make tests not run concurrently
serial_test = ...

tests:

use edtest::test;
use tracing::*;

/// Normal synchronous test.
/// Note that `cargo test` still tries to run these concurrently!
#[test]
fn sync_test() {
    info!("Tracing output is captured and part of the test output");
}

/// Async tests using `tokio` are fully supported - they can even
/// be run using `serial` (non-concurrent)
#[test]
#[edtest::serial]
async fn async_value_test(
    #[values(0, 1, 2, 3, 4, 5)] a: u32,
    #[values(0, 1, 2, 3, 4, 5)] b: u32,
) {
    use edtest::assert_cfg;
    // `static_assertions` are re-exported for convenience
    assert_cfg!(test);

    trace!(a, b);
    let ab = super::add(a, b);
    let ba = b + a;
    assert_eq!(ab, ba);

    tokio::time::sleep(std::time::Duration::from_millis(100)).await;
}

Noteworthy crates

General

Messing with files

  • assert_fs Working with external files during testing
  • tempfile Temporary storage and files

Network

  • mockito Generating and delivering HTTP mocks
  • axum-test Test Axum servers in isolation.

CLI programs

  • assert_cmd Simplify integration testing of CLI's
  • rexpect Running/testing interactive CLI's

Tools

  • coverage LLVM Coverage reports the easy way

Dependencies

~6–12MB
~136K SLoC