'Use rust cargo to run tests in workspace root

I've got the following rust project layout:

project_name
 ├── crate_1
 │     ├── src
 │     │     ...
 │     │     └── main.rs
 │     └── Cargo.toml
 ├── crate_2
 │     ├── src
 │     │     ...
 │     │     └── lib.rs
 │     └── Cargo.toml
 ├── tests
 │     └── tests.rs <-- run tests in here
 └── Cargo.toml

I want to run the tests in the tests directory using cargo, however cargo can't seem to find them. Is there a way to get cargo to run them?



Solution 1:[1]

tokio is a very good example.

Now you already have a tests directory, let's add it to the members in workspace Cargo.toml.

[workspace]

members = [
    "crate1",
    "crate2",

    "tests"
]

We assume that there are two integration test files, test_crate1.rs and test_crate2.rs under the tests directory.

Create a Cargo.toml under the tests directory with these contents:

[package]
name = "tests"
version = "0.1.0"
edition = "2021"
publish = false

[dev-dependencies]
crate1 = { path = "../crate1" }
crate2 = { path = "../crate2" }

[[test]]
name = "test_crate1"
path = "test_crate1.rs"

[[test]]
name = "test_crate2"
path = "test_crate2.rs"

Run cargo test in workspace directory to check it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sprite