8个版本
0.3.0 | 2024年2月27日 |
---|---|
0.2.0 | 2024年2月26日 |
0.1.6 | 2024年2月26日 |
0.1.4 | 2022年7月19日 |
0.1.1 | 2021年1月18日 |
#37 in 测试
10KB
test-context
为Rust测试提供自定义设置/清理功能,无需测试框架的库。
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!");
}
或者,您可以通过使用async
函数在测试上下文中使用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!");
}
AsyncTestContext
与异步测试包装器(如actix_rt::test
或tokio::test
)配合良好。
#[test_context(MyAsyncContext)]
#[tokio::test]
async fn test_works(ctx: &mut MyAsyncContext) {
assert_eq!(ctx.value, "Hello, World!");
}
跳过清理执行
如果您需要完全拥有上下文并不需要对特定测试执行清理,您可以在宏中使用skip_teardown
关键字,如下所示
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
}
许可证:MIT
依赖关系
~0.9–1.5MB
~32K SLoC