#test-harness #async-test #teardown #async-context #setup #test

test-context

为Rust测试提供自定义设置/清理功能,无需测试框架的库。

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 测试

Download history 17391/week @ 2024-04-23 16495/week @ 2024-04-30 18559/week @ 2024-05-07 18024/week @ 2024-05-14 11207/week @ 2024-05-21 15678/week @ 2024-05-28 20527/week @ 2024-06-04 19826/week @ 2024-06-11 13820/week @ 2024-06-18 18012/week @ 2024-06-25 17938/week @ 2024-07-02 22256/week @ 2024-07-09 14417/week @ 2024-07-16 17493/week @ 2024-07-23 19223/week @ 2024-07-30 18277/week @ 2024-08-06

73,417 每月下载量
270 crates中使用 (直接使用17)

MIT 协议

10KB

crates.io Documentation License Github

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::testtokio::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