一.控制测试的运行方式
- 为
cargo test
指定命令行参数 - 为 生成的测试二进制文件指定参数
1.1 向测试二进制文件传递参数
cargo test -- --help
1.1.1 并行或串行地进行测试
- 运行多个测试时,Rust 默认使用多线程来并行执行.
- 若不想并行测,或希望精确控制测试时所启动的线程数量,可以通过
--test-threads
控制 .
cargo test -- --test-threads=1
1.1.2 显示函数输出
cargo test -- --nocapture
1.1.3 通过显示指定来忽略某些测试
- 某些特定测试执行起来非常耗时
- 使用
ignore
属性来标记被忽略的测试, 将这些测试排除在正常的测试外 - 忽略测试 :
cargo test
, #[ignore]
标注的方法被忽略 - 单独测试被忽略的测试:
cargo test -- --ignored
, 仅 1ignore_test
被测试
#[test]
#[ignore]
fn ignore_test(){}
1.2 向 cargo test
传递参数
cargo test --help
1.2.1 只运行部分特定名称的测试
cargo test test_one
二.测试的组织结构
2.1 单元测试 : #cfg[test]
- 在 tests 模块上标注
#cfg[test]
可以让 Rust 只在执行 cargo test
命令时编译和运行该部分测试代码,而在 cargo build
时剔除它们。 - 无需对集成测试标注
#cfg[test]
,集成测试本身在独立的目录tests
中, 与 src
目录同级别。
#cfg[test]
mod tests{
#[test]
fn test_one(){}
}
2.2 集成测试
2.2.1 单独运行特定测试文件
cargo test --test http --features="local-http, server"
--test
: 指定文件名, 如 tests/http.rs
--features
: 该测试需要启用的 features
cargo test --test basic -- --nocapture
- 对集成测试 tests/basic.rs 测试,并输出内容
running 1 test
Cert-PEM=>
-----BEGIN CERTIFICATE-----
MIIBcjCCARmgAwIBAgIUf6uvgFf3AGfk5QdQdsk+Dg1NweowCgYIKoZIzj0EAwIw
ITEfMB0GA1UEAwwWcmNnZW4gc2VsZiBzaWduZWQgY2VydDAgFw03NTAxMDEwMDAw
MDBaGA80MDk2MDEwMTAwMDAwMFowITEfMB0GA1UEAwwWcmNnZW4gc2VsZiBzaWdu
ZWQgY2VydDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBn2/LLdOldPhbp0R8EJ
8r6Rc8uqsD/1rwBuIk8setf5YnzFpxHwEa6uIlfI9yvvGu5TQ7SniO5WLTe7G5de
542jLTArMCkGA1UdEQQiMCCCE2hlbGxvLndvcmxkLmV4YW1wbGWCCWxvY2FsaG9z
dDAKBggqhkjOPQQDAgNHADBEAiAVQJrfVJwGgHmyJzt6YVQPbhTZ79qrcc59N7yx
lLKx0wIgQnuQYRxGkLiVqxswtuiRIUcCQfdyv4WdJd8HOVy6vlk=
-----END CERTIFICATE-----
PKCS8-KeyPaire=>
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgkzC+sXb9Sj/ApO0i
97nczw4hM/voUtfwaxL2cPHTCj+hRANCAAQZ9vyy3TpXT4W6dEfBCfK+kXPLqrA/
9a8AbiJPLHrX+WJ8xacR8BGuriJXyPcr7xruU0O0p4juVi03uxuXXueN
-----END PRIVATE KEY-----
test test_self_signed_cert ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s