关闭

Rust中文翻译17

标签: rust编程语言测试testing自动测试
800人阅读 评论(0) 收藏 举报
分类:

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,取决于机器的配置.


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32313次
    • 积分:693
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:33篇
    • 评论:13条
    文章分类
    最新评论