## test]暗含`#[cfg(test)]`吗?

时间:2019-05-05 18:24:39

标签: unit-testing testing rust attributes visibility

按惯例,Rust中的单元测试有一个单独的模块,该模块有条件地用#[cfg(test)]编译:

#[cfg(test)]
mod tests {
    #[test]
    fn test1() { ... }

    #[test]
    fn test2() { ... }
}

但是,我一直在使用一种更内联测试的样式:

pub fn func1() {...}

#[cfg(test)]
#[test]
fn test_func1() {...}

pub fn func2() {...}

#[cfg(test)]
#[test]
fn test_func2() {...}

我的问题是,#[test]暗示#[cfg(test)]吗?也就是说,如果我用#[test]而不是#[cfg(test)]标记测试函数,那么在非测试版本中它们是否仍然正确存在?

1 个答案:

答案 0 :(得分:5)

  

我的问题是,#[test]暗示#[cfg(test)]吗?也就是说,如果我用#[test]而不是#[cfg(test)]标记测试函数,那么在非测试版本中它们是否仍然正确存在?

是的。如果您没有使用单独的模块进行测试,则无需使用#[cfg(test)]。标记为#[test]的功能已从非测试版本中排除。可以很容易地验证这一点:

#[test]
fn test() {}

fn main() {
    test(); // error[E0425]: cannot find function `test` in this scope
}