Luc*_*iel 4 testing attributes unit-testing visibility rust
按照惯例,Rust中的单元测试有一个单独的模块,该模块有条件地用#[cfg(test)]以下代码编译:
#[cfg(test)]
mod tests {
#[test]
fn test1() { ... }
#[test]
fn test2() { ... }
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直在使用一种更内联测试的样式:
pub fn func1() {...}
#[cfg(test)]
#[test]
fn test_func1() {...}
pub fn func2() {...}
#[cfg(test)]
#[test]
fn test_func2() {...}
Run Code Online (Sandbox Code Playgroud)
我的问题是,#[test]暗示#[cfg(test)]吗?也就是说,如果我用#[test]而不是标记我的测试功能#[cfg(test)],那么在非测试版本中它们是否仍然正确存在?
我的问题是,
#[test]暗示#[cfg(test)]吗?也就是说,如果我用#[test]而不是标记我的测试功能#[cfg(test)],那么在非测试版本中它们是否仍然正确存在?
是。如果您没有使用单独的模块进行测试,则无需使用#[cfg(test)]。标#[test]有的功能已从非测试版本中排除。这很容易验证:
#[test]
fn test() {}
fn main() {
test(); // error[E0425]: cannot find function `test` in this scope
}
Run Code Online (Sandbox Code Playgroud)