测例
rust 的 cargo 系统集成了测试系统,使得开发者不必再去编写或者挑选测试工具,在不使用 IDE 的情况下,依旧能有一个很棒的测试体验。
基本命令格式
cargo test
[options] [testname] [--
test-options]
单元测试
是与源码写在一个文件中的测例。通常同于测试文件中的某些功能函数。用 #[test]
对测例函数进行注解。
#![allow(unused)] fn main() { #[test] fn test_peer_id() { let local_key = identity::Keypair::generate_ed25519(); let local_peer_id = PeerId::from(local_key.public()); println!("Local peer id: {:?}", local_peer_id); } }
命令:
cargo test --example chat
集成测试
单独创建一个区域用于编写测例,这里测例通常都是功能丰富的,用于测试多个函数、模块是否可以正常合作,功能块的运行是否符合预期。
cargo 默认将集成测试目录至与根目录中:
.
├── Cargo.lock
├── Cargo.toml
├── examples
│ └── ...
├── README.md
├── src
│ └── ...
└── tests
└── chat.rs
测例函数同样需要用 #[test]
对测例函数进行注解,且此时测试文件是一个完整的源码文件,依赖关系需要正确:
#![allow(unused)] fn main() { // ./tests/chat.rs use libp2p::{ floodsub::{self, Floodsub, FloodsubEvent}, identity, mdns::{Mdns, MdnsConfig, MdnsEvent}, swarm::SwarmEvent, Multiaddr, NetworkBehaviour, PeerId, Swarm, }; /// /// ``` /// let local_key = identity::Keypair::generate_ed25519(); /// let local_peer_id = PeerId::from(local_key.public()); /// assert!(true) /// ``` /// #[test] fn new_peer_id() { let local_key = identity::Keypair::generate_ed25519(); let local_peer_id = PeerId::from(local_key.public()); assert!(true) } }
命令:
cargo test --test chat
文档测例
cargo 有一套功能完善的文档系统,完善到可以在代码中写注释、在注释中写文档、在文档中写测例。
注意:
文档测例在库(
lib
)工程中有用。
#![allow(unused)] fn main() { /// /// ``` /// assert!(true); /// ``` /// mod handler; mod protocol; // ... }
命令:
cargo test --doc