如何使用属性在Rust中禁用单元测试?

29

一个模块包含多个测试,如下所示:

#[cfg(test)]
mod tests_cases {

    /*
    #[test]
    fn test_1() {
        let a = 1;
        let b = 2;
        println!("{},{}", a, b);
        assert_ne!(a, b);
    }
    */

    #[test]
    fn test_2() {
        let c = 1;
        let d = 1;
        println!("currently working on this: {},{}", c, d);
        assert_eq!(c, d);
    }
}

当进行第二个测试并且输出可见时(cargo test -- --nocapture),我不想看到第一个测试的输出。是否有禁用已注释单元测试的选项?或者是否有只运行第二个单元测试的选项?

3
如果您只想获取单个测试的输出,可以像这样请求:cargo test module::tests::test_2 - Kendas
3
这个回答是否解决了你的问题?如何在Rust中运行特定的单元测试? - Ömer Erden
2个回答

56

另一种选择是添加#[ignore]属性。

#[ignore]
#[test]
fn test_1() {
    let a = 1;
    let b = 2;
    println!("{},{}", a, b);
    assert_ne!(a, b);
}

这将为测试结果添加一个漂亮的有颜色的忽略。

test tests::test_1 ... ignored
test tests::test_2 ... ok

test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.03s

来源: 除非特别请求,否则忽略某些测试


6
这个答案比我的更好。这应该是被接受的答案。 - Refael Sheinker
这些像这样的小事情,使得开箱即用的 Rust 开发体验如此出色! - Nathaniel Rogers
4
忽略的原因可以用 #[ignore = "暂时忽略"] 来说明。 - TF.Ryan

6
如果您从不需要的测试中删除#[test]属性,则cargo test将忽略它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接