Skip to main content

Crate suitecase

Crate suitecase 

Source
Expand description

The structured test toolkit. A sync Rust library for named cases, optional lifecycle hooks, and cargo test integration via run—without a custom harness or DSL.

§How a run works

  1. You build a static slice of Case values with cases! and pass HookFns plus RunConfig to run.
  2. run selects which cases to execute: either all of them, or only the one whose Case::name equals RunConfig::filter.
  3. If nothing is selected and a filter was set, it panics (likely a typo). If nothing is selected and there is no filter, it returns immediately (empty case list).
  4. Otherwise it runs optional hooks in order: setup_suite → for each selected case: before_each → case body → after_each → then teardown_suite. Hook slots that are None in HookFns are skipped.

Panics inside a case are caught so after_each still runs; the panic is re-raised afterward.

§Macros

MacroRole
cases!Build &'static [Case<S>] from inline blocks per case
test_suite!Emit one #[test] per case; all share one Mutex suite (optional inline cases! syntax so names are not repeated)

§Assertions

The assert module provides testify-style helpers (equal, no_error, contains, …) that panic on failure, for use in tests and suite case bodies.

§Mocking

The mock module provides testify/mock-style expectations and call recording (mock::Mock, [mock::mock_args!]).

§Example

use suitecase::{cases, run, Case, HookFns, RunConfig};

#[derive(Default)]
struct Counter {
    n: i32,
}

static CASES: &[Case<Counter>] = cases![Counter, s =>
    test_inc => { s.n += 1; },
];

let mut suite = Counter::default();
run(&mut suite, CASES, RunConfig::all(), &HookFns::default());
assert_eq!(suite.n, 1);

Re-exports§

pub use suite::Case;
pub use suite::HookFns;
pub use suite::RunConfig;
pub use suite::run;

Modules§

assert
Panicking assertion helpers for tests (in the spirit of Go’s testify/assert).
mock
Test doubles with expectations and call recording, in the spirit of Go’s testify/mock.
suite
Suite runner: Case lists, HookFns, RunConfig, and run.

Macros§

cases
Build a &'static [Case<S>] from case names and inline blocks.
mock_args
Builds Arguments from a list of expressions, each boxed as Any + Send.
test_suite
Emit one #[test] per listed case name. Each test locks a shared suite behind a std::sync::Mutex in a std::sync::OnceLock keyed by $storage, then calls run with RunConfig::filter and your HookFns.