8 releases
0.3.0 | Feb 27, 2024 |
---|---|
0.2.0 | Feb 26, 2024 |
0.1.6 | Feb 26, 2024 |
0.1.4 | Jul 19, 2022 |
0.1.1 | Jan 18, 2021 |
#29 in Testing
54,329 downloads per month
Used in 275 crates
(22 directly)
10KB
test-context
A library for providing custom setup/teardown for Rust tests without needing a test harness.
use test_context::{test_context, TestContext};
struct MyContext {
value: String
}
impl TestContext for MyContext {
fn setup() -> MyContext {
MyContext { value: "Hello, World!".to_string() }
}
fn teardown(self) {
// Perform any teardown you wish.
}
}
#[test_context(MyContext)]
#[test]
fn test_works(ctx: &mut MyContext) {
assert_eq!(ctx.value, "Hello, World!");
}
Alternatively, you can use async
functions in your test context by using the
AsyncTestContext
.
use test_context::{test_context, AsyncTestContext};
struct MyAsyncContext {
value: String
}
impl AsyncTestContext for MyAsyncContext {
async fn setup() -> MyAsyncContext {
MyAsyncContext { value: "Hello, World!".to_string() }
}
async fn teardown(self) {
// Perform any teardown you wish.
}
}
#[test_context(MyAsyncContext)]
fn test_works(ctx: &mut MyAsyncContext) {
assert_eq!(ctx.value, "Hello, World!");
}
The AsyncTestContext
works well with async test wrappers like
actix_rt::test
or
tokio::test
.
#[test_context(MyAsyncContext)]
#[tokio::test]
async fn test_works(ctx: &mut MyAsyncContext) {
assert_eq!(ctx.value, "Hello, World!");
}
Skipping the teardown execution
If what you need is to take full ownership of the context and don't care about the
teardown execution for a specific test, you can use the skip_teardown
keyword on the macro
like this:
use test_context::{test_context, TestContext};
struct MyContext {}
impl TestContext for MyContext {
fn setup() -> MyContext {
MyContext {}
}
}
#[test_context(MyContext, skip_teardown)]
#[test]
fn test_without_teardown(ctx: MyContext) {
// Perform any operations that require full ownership of your context
}
License: MIT
Dependencies
~0.9–1.5MB
~32K SLoC