【Rust】多级目录模块化集成测试——以Cucumber为例
多级目录模块化集成测试
- 方法一:`Cargo.toml`中为子测试目录和文件新建`[[test]]`入口
- 方法二:在`tests/`目录的`.rs`文件中引用子目录的测试方法
方法一:Cargo.toml
中为子测试目录和文件新建[[test]]
入口
tests
目录下新建子测试目录,比如tests/map
在tests/map
中新建一个vertex.rs
测试代码文件:
use cucumber::World;// `World` is your shared, likely mutable state.
// Cucumber constructs it via `Default::default()` for each scenario.
#[derive(Debug, Default, World)]
pub struct VertexWorld {}// This runs before everything else, so you can setup things here.
fn main() {// You may choose any executor you like (`tokio`, `async-std`, etc.).// You may even have an `async` main, it doesn't matter. The point is that// Cucumber is composable. :)futures::executor::block_on(VertexWorld::run("tests/features/map/Vertex.feature"));
}
在Cargo.toml
中,多配置一组[[test]]
键,并指向新的测试文件tests/map/vertex.rs
:
[[test]]
name = "test_map_vertex"
path = "tests/map/vertex.rs" // 如果声明了path路径,那么name可以与文件名或test target名不同
harness = false # allows Cucumber to print output instead of libtest
命令行中执行cargo test --test test_map_vertex
运行测试用例。
方法二:在tests/
目录的.rs
文件中引用子目录的测试方法
Cargo.toml
中将[[package]]
下的autotests = true
启用自动发现测试目标
新建tests/map/vertex.rs
:
use cucumber::World;// `World` is your shared, likely mutable state.
// Cucumber constructs it via `Default::default()` for each scenario.
#[derive(Debug, Default, World)]
pub struct VertexWorld {}// This runs before everything else, so you can setup things here.
pub fn test_vertex() {// You may choose any executor you like (`tokio`, `async-std`, etc.).// You may even have an `async` main, it doesn't matter. The point is that// Cucumber is composable. :)futures::executor::block_on(VertexWorld::run("tests/features/map/Vertex.feature"));
}
新建tests/map/mod.rs
:
pub mod vertex;
在/tests/test.rs
中引用子目录的测试方法:
mod map;#[test]
pub fn test_vertex() {map::vertex::test_vertex();
}
运行cargo test
,子目录的测试方法会被执行