#parameterized #macro #parametrized #code-gen #test

test_gen

一个综合的函数式宏,用于简洁地定义参数化测试

5 个版本

0.2.3 2023年1月9日
0.2.2 2022年12月19日
0.2.1 2022年12月15日
0.2.0 2022年12月8日
0.1.0 2022年11月4日

测试 中排名第 458

BSD-3-Clause

22KB
292 代码行

test_gen

一个综合的函数式宏,用于简洁地定义参数化测试。

此 crate 提供了与其同名的函数式宏 test_gen,它允许简洁地定义一系列命名的测试,实现参数化参数格式,以最小化指定类似测试批次时通常所需的样板代码。

文档可以在 Docs.rs 中找到。

用法

最低支持的 Rust 版本 1.63.0

test_gen 可以使用以下命令添加到项目中

cargo add test_gen --dev

或者,通过将其 Cargo.toml 文件中的以下行添加

[dev-dependancies]
test_gen = "0.2.3"

示例

水果

use test_gen::*;

enum Fruit<T> {
    Apple,
    Pear,
    Other(T),
}

enum BrambleFruit {
    BlackBerry,
}

trait NameOf {
    fn name_of(&self) -> &str;
}

impl<T: NameOf> NameOf for Fruit<T> {
    fn name_of(&self) -> &str {
        use Fruit::*;

        match self {
            Apple => "apple",
            Pear => "pear",
            Other(fruit) => fruit.name_of(),
        }
    }
}

impl NameOf for BrambleFruit {
    fn name_of(&self) -> &str {
        use BrambleFruit::*;

        match self {
            BlackBerry => "blackberry",
        }
    }
}

// Helper function
fn assert_fruit<T: NameOf>(fruit: Fruit<T>, name: &str) {
    assert_eq!(fruit.name_of(), name);
}

// Test specification
test_gen! {
    // Normal turbofish syntax can be used,
    // when concrete type specification is required
    fn assert_fruit::<BrambleFruit> => {
        apple: {
            (Fruit::Apple, "apple")
        },
        // Applying case specific attributes
        pear: {
            #[ignore]
            (Fruit::Pear, "pear")
        },
        isnt_pear: {
            #[should_panic]
            (Fruit::Pear, "apple")
        },
        blackberry: {
            (Fruit::Other(BrambleFruit::BlackBerry), "blackberry")
        },
    }
}

许可证

test_gen 采用 BSD 3-Clause 许可。

有关详细信息,请参阅 LICENSE

依赖项

~1.5MB
~35K SLoC