标签:rust 编程语言 测试 testing 自动测试
4.2.4 文档测试
没有什么比带有示例的文档更好的了.也没有什么比不能工作的例子更糟的了,因为有可能文档中的代码已经修改了.为此,Rust支持自动测试我们示例代码.让我们看一个富有血肉的src/lib.rs的例子:
//! The àdder` crate provides functions that add numbers to other numbers.
//!
//! # Examples
//!
//! ```
//! assert_eq!(4, adder::add_two(2));
//! ```
/// This function adds two to its argument.
///
/// # Examples
///
/// ```
/// use adder::add_two;
///
/// assert_eq!(4, add_two`2));
/// ```
pub fn add_two(a: i32) -> i32 {
a + 2
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
assert_eq!(4, add_two(2));
}
}
注意模块级别的注释是//!,函数级别的注释是///.Rust注释支持注释中使用Markdown,习惯上使用#Example来开始示例.
运行这个测试:
现在我们有3中测试了!注意文档测试的名字:_0是用来模块测试的时候生成的,所以add_two_0就是函数测试.这个名字会自动增长,比如add_two_1等等.
Page 83
4.3 条件编译
Rust有一个特殊的属性, #[cfg], 你可以通过标识来控制编译器,它有两种形式:
#[cfg(foo)]
#[cfg(bar="baz")]
它还有一些帮助选项:
#[cfg(any(unit, windows))]
#[cfg(all(unit, target_pointer_width="32"))]
#[cfg(not(foo))]
也可以嵌套:
#[cfg(any(not(unix), all(target_os="macos", target_arch = "powerpc")))]
至于如何启用和禁用这些开关,你可以试用Cargo,在Cargo.toml文件中有一个[features]属性:
[features]
#no features by default
default = []
# The "secure-password" feature depands on the bcrypt package.
secure-password = ["bcrypt"]
如果你这样设置了,Cargo就会传递一个标识给rustc:
--cfg feature="${feature_name}"
这些cfg标记一起决定了哪些代码被激活,哪些代码被编译.看看这个代码:
Page 84
#[cfg(feature = "foo")
mod foo {
}
如果我们用cargo build --feature "foo"来编译,它会给rustc发送一个--cfg feature "foo",然后输出就会带有mod foo代码.如果我们使用一般的cargo build不传递任何参数,那么foo模块就不会存在于代码中.
4.3.1 cfg_attr
你可以设置另一个cfg的变量cfg_attr:
#{cfg_attr(a, b)]
它和这个命令一样:当a被cfg属性设置以后再使用#[b].
4.3.2 cfg!
cfg!语法可以使用在代码中:
if cfg!(target_os = "mac_os") || cfg!(target_os = "ios") {
println!("Think Different!");
}
在运行时会被替换成true或者false,取决于机器的配置.
Rust中文翻译17
标签:rust 编程语言 测试 testing 自动测试
原文地址:http://blog.csdn.net/zcmit/article/details/46822599