Macro nar_dev_utils::fail_tests

source ·
macro_rules! fail_tests {
    {} => { ... };
    {$(#[$attr:meta])* $name:ident $code:block $($tail:tt)*} => { ... };
    {$(#[$attr:meta])* $name:ident $code:expr; $($tail:tt)*} => { ... };
    {$(#[$attr:meta])* $name:ident $code:stmt; $($tail:tt)*} => { ... };
}
Expand description

§辅助用测试宏/批量添加失败测试

  • 可极大减轻添加should_panic的代码量

! 📝, $(,)?这里的「,」代表的不是「分隔表达式」,而是「模式中的,

  • 故应去除这前边的「,」

用法:

use nar_dev_utils::fail_tests;
// 一般形式:函数名 {代码}
fail_tests! {
    /// 允许文档注释
    失败测试的函数名 {
        // 会导致panic的代码
    }
    // ... 允许多条
}
// 亦可:函数名 表达式/语句
fail_tests! {
    /// 允许文档注释
    失败测试的函数名 if true {panic!("会导致panic的表达式")} else {};
    // ... 允许多条
}
fail_tests! {
    /// 允许文档注释
    失败测试的函数名 panic!("会导致panic的语句");
    // ... 允许多条
}

§用例

use nar_dev_utils::fail_tests;
fail_tests! {
    /// 失败测试
    fail {
        panic!("这是一个测试")
    }
    /// 失败测试二号
    fail2 {
        panic!("这是另一个测试")
    }
}

将被等价转换为

/// 失败测试
#[test]
#[should_panic]
fn fail() {
    panic!("这是一个测试")
}

/// 失败测试二号
#[test]
#[should_panic]
fn fail2() {
    panic!("这是另一个测试")
}
  • ✅【2024-03-15 20:15:20】现在借鉴lazy_static包,可以在测试中使用文档字符串了
    • 📝原理:文档字符串实际上是#[doc = "一行文本…"]的语法糖
    • 📝技法:使用$(#[$attr:meta])*匹配元数据,然后原样输出