Closed
Description
Invoking a single unit test from the Test Explorer or keyboard shortcut will build the entire workspace and tests are processed in every workspace member which causes several problems:
- unit tests cannot run if any crate in a workspace does not compile even though they are not relevant dependencies
- running a unit test builds unrelated crates on every/any code change
- unit tests are referenced by their name within a crate which can collide between between workspace members
- e.g. two clis in a workspace with a main.rs containing
mod tests :: test_arg_parsing
- this means the wrong test is run / results reported against the wrong test etc.
- e.g. two clis in a workspace with a main.rs containing
- even without any code changes:
- unit tests run much slower because the runner tries to run the test in every single workspace member
- rust-analyzer takes multiple seconds to run a test that
cargo test
completes in milliseconds
- rust-analyzer takes multiple seconds to run a test that
- there is excess message spam in the test output because it contains every warning/lint and build message from the entire workspace
- unit tests run much slower because the runner tries to run the test in every single workspace member
Example test output trying to execute one unit test where rust-anlayzer tries to run a test in every single workspace member which I have anonymised as <crate>
:
Running unittests src/main.rs (target/debug/deps/<crate>-d7d1af8a1ff77b91)
Running unittests src/main.rs (target/debug/deps/<crate>-8f1e321689784723)
Running unittests src/main.rs (target/debug/deps/<crate>-630fa9cd06696d27)
Running unittests src/main.rs (target/debug/deps/<crate>-94ccfaaf3259bc9c)
Running unittests src/main.rs (target/debug/deps/<crate>-03afafaad8d31312)
Running unittests src/lib.rs (target/debug/deps/<crate>-6ec99e8e97e196c7)
Running unittests src/lib.rs (target/debug/deps/<crate>-1294bbf4f9a3a681)
Running unittests src/main.rs (target/debug/deps/<crate>-a0bf89f18085b65e)
Running unittests src/main.rs (target/debug/deps/<crate>-c2d90a1bf651628e)
...
etc.
Doc-tests <crate>
Doc-tests <crate>
Doc-tests <crate>
Doc-tests <crate>
Doc-tests <crate>
Doc-tests <crate>
Doc-tests <crate>
...
etc.
@HKalbasi I can see this relates to your changes here:
I have a PR that behaves as I expect which is to run tests on the crate in which they are defined and not at the workspace root but I don't know if this will cause other issues.