惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Martin Fowler
Martin Fowler
T
Tailwind CSS Blog
B
Blog RSS Feed
Vercel News
Vercel News
博客园 - 聂微东
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
GbyAI
GbyAI
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
B
Blog

The Rust Programming Language Forum - Latest posts

What's everyone working on this week (21/2026)? Rust Function Call with one Param Iced + Canvas + Text: How do I create a style for canvas text "Value dropped while borrowed" as a lifetime mismatch Weird `use of moved value` behaviour Slightly surprising behavior of a while loop Clap: how to disable options after a certain positional argument How do i tell rust-analyzer what kind of bracket to use for a macro? Iterator + Borrow Checker: Work around borrowing already borrowed mutable variable Requesting data via mavlink SKILLS.md for Rust development 🧵 Stringlet UTF-8 Hack Option Niche? Iterator + Map - How do divide every element, including the last element, by the last element Why can't we store returned value of a function in a variable if one of the parameters goes out of scope My first crate :D, floop: A more convenient and less error prone replacement for loop `{ select! { .. }}` Sorting is slow because architectures are wrong — zan-sort redesigns the architecture, not the algorithm Iced Font - Create a custom monospace font to display dollar amounts Is the UnsafePinned RFC wrong about being able to return `&mut T` from `get_mut_unchecked`? Fixing Polars 0.37 compilation errors: Hashbrown 0.17 dependency conflict and decimal parsing Any plans for improving error diagnostic in Rust 2.0? How do I build completely offline? Is `&mut T -> &mut ManuallyDrop<T>` well-defined and sound? Would you use this? — fixtura, declarative fake data injection for tests Foreign trait restrictions on native types make generics hard to use Cargo Exclude Directive Compiler reasoning around a modulo counter Multiple mutable references to elements within one vector Handling non-`Send` data in a `Send` closure Review: Static Multi Pool Allocator Rmquickjs - High-level MicroQuickJS bindings for Rust
Why are builds of my crate's test not consistent (cargo b...
stefan-huber · 2026-04-17 · via The Rust Programming Language Forum - Latest posts

April 17, 2026, 8:10am 1

TL/TR
Why are build results of my crate's test not consistent - I see rebuilds happen for combinations of these without changes in between?

  • cargo build --all-targets
  • cargo test -p create_a
  • VSCode Test Explorer building tests for create_a

Background:

  • we use a rust workspace ~40 creates as members
  • cargo build --all-targets would build ~600 individual crates (i.e. dependencies + workspace crates)
  • one of the crates in workspace "crate_a" would build ~300 individual creates (i.e. dev-dependencies + the crate's test itself)
  • we have equivalent observation (see blow) no matter whether or not we use [workspace.dependencies] consistently (same versions and feature sets) for all creates in our workspace (including their dev-dependencies). (we tested for both cases)

Development practice

  • We use VSCode with rust-analyzer extension as development tool on windows workstations.

  • We use .vscode/settings.json having "rust-analyzer.testExplorer": true,

  • we use any of these when we want to verify/debug test cases:

    • from terminal: {workspace_root} cargo test (for complete workspace)
    • from terminal: {workspace_root}/create_a cargo test (for individual crate in workspace)
    • CodeLens: run individual test cases with or without debug triggered from inside source code editor
    • Testing view (Test Explorer): run all or individual test cases triggered
  • we usually do a {workspace_root} cargo build --all-targets before we run tests hoping for both:

    • a) quick feedback if your change compiles and doesn't break compilation of other test cases
    • b) have build results ready for running any number or selection of tests

We suffer from un-expected rebuilds (even without source code changes) in these scenarios. This way we suffer from slow turnaround times.

Observation
Here comes a scenario (Note: no changes to workspace happen in between)

  • cargo clean
  • cargo build --all-targets
    -> creates (among others) \target\debug\deps\crate_a-<hash_a>.exe
  • cargo test -p crate_a
    -> (unexpected) rebuilds some dependencies and creates
    target\debug\deps\crate_a-<hash_b>.exe
  • using test-lens to run a test case
    -> no rebuild (as expected), uses
    target\debug\deps\crate_a-<hash_b>.exe
  • using test explorer
    -> (unexpected) rebuild some deps + *.exe
    -> seems to re-create
    (target\debug\deps\crate_a-<hash_b>.exe)
  • using test-lens to run a test case
    -> (unexpected) rebuild some deps + *.exe
    -> seems to re-create
    (target\debug\deps\crate_a-<hash_b>.exe)
  • cargo test -p crate_a
    -> (as expected) no rebuild
    -> uses target\debug\deps\crate_a-<hash_b>.exe
  • cd .crate_a
  • cargo test
    -> no rebuild (as expected)
    -> uses target\debug\deps\crate_a-<hash_b>.exe
  • using test lens
    -> (as expected) no rebuild
    -> uses target\debug\deps\crate_a-<hash_b>.exe
  • using test explorer
    -> (unexpected) rebuild some deps + *.exe
    -> uses target\debug\deps\crate_a-<hash_b>.exe

Fazit
It seems there is an (for us) unexpected inconsistency/rebuild happening between
a) cargo build --all-targets (workspace) and the building/running crate_a's test
b) VS Code Test Explorer doesn't seem to 'accept' build result of create_a's test and re-creates it when alredy previously been build.

So for me it comes down to two questions

  1. Why does cargo build --all-targets and individual builds via cargo test -p crate_a don't create/re-use the same build result?
  2. Why does VS Codes's "Test Explorer" and the other ways to create build result for crate_a's do re-builds, even though thy apparently use the same build result?

kpreid April 17, 2026, 4:16pm 2

When you perform a build, the set of enabled features is determined by what is required by all packages being built. Therefore, when you restrict the build to one of your packages with -p crate_a, fewer features are enabled, requiring a different build of the packages with those features and all of their transitive dependents.

I thought I had an answer to this, but I just tested and I don’t. In general, the common things that cause rebuilds besides the above are environment variables being different. Also, if you use cargo build --verbose you can have Cargo print why it thinks something needs rebuilding (as opposed to building a different feature configuration).