#fixture #unit-testing #fixtures #macro #argument

s_test_fixture

s_test_fixture 或简单测试固定件是一个无需烦恼即可实现测试固定件的宏库。

9 个版本

0.1.8 2022年2月6日
0.1.7 2021年10月16日
0.1.4 2021年9月30日

619过程宏

MIT 许可证

14KB
161

s_test_fixture

s_test_fixture 或简单测试固定件是一个无需烦恼即可实现测试固定件的宏库。

使用方法

有四个宏:beforeafterbefore_eachafter_each。作为参数传递的函数必须返回 ()

beforeafter 简单地添加到测试函数之前。

before_eachafter_each 的行为类似,并且与 beforeafter 宏堆叠。需要注意的是,作为参数传递的函数的作用域很重要,它必须在测试模块内部可见。

before

#[cfg(test)]
mod tests {
    use s_test_fixture::before;
    #[test]
    #[before(function_to_run(2))]
    fn test() {
        let a = 2;
        something();
        assert_eq!(a,2);
        println!("ending");

    }
    
    fn something(){}

    fn function_to_run(i:i32){
        println!("I did {} thing(s)",i);
    }
}

将返回

I did 2 thing(s)
ending

after

#[cfg(test)]
mod tests {
    use s_test_fixture::after;
    #[test]
    #[after(function_to_run(66))]
    fn test() -> Result<(), ()> {
        println!("before");
        let i = -55;
        something();
        if i == 0 {
            something();
            Ok(())
        } else if i == 2 {
            something();
            return Ok(());
        } else {
            panic!("oh no!");
            Ok(())
        }
    }
    
    fn something(){}

    fn function_to_run(i:i32){
        println!("I did {} thing(s)",i);
    }
}

将返回

before
{panic statement}
I did 66 thing(s)

before_each

use s_test_fixture::{before_each,after, before};

#[cfg(test)]
#[before_each(function_to_run(78))]
mod tests {
    use super::*;
    #[test]
    #[before(function_to_run(2))]
    fn test() {
        let a = 2;
        something();
        assert_eq!(a,2);
        println!("ending");

    }
    
    fn something(){}

    fn function_to_run(i:i32){
        println!("I did {} thing(s)",i);
    }
}

将返回

I did 2 thing(s)
I did 78 thing(s)
ending

测试

运行 cargo test -- --test-threads 1

依赖项

~1.5MB
~35K SLoC