按惯例,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)]
标记测试函数,那么在非测试版本中它们是否仍然正确存在?
答案 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
}