-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Add sections about testing concurrency and stdout/err capture #37766
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -586,3 +586,46 @@ you add more examples. | |
|
||
We haven’t covered all of the details with writing documentation tests. For more, | ||
please see the [Documentation chapter](documentation.html). | ||
|
||
# Testing and concurrency | ||
|
||
One thing that is important to note when writing tests are run concurrently | ||
using threads (by default the number of threads is equal to the number of CPUs | ||
on the machine). For this reason you should take care that your tests are | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you remove this? It's not exactly true ish, and it's not something we guarantee. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The concurrency/threading in testing bit? I understand that it may be platform dependant, but I think it's important to point this out or you can spend some time debugging race conditions in your tests. Can you suggest a more accurate version? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the parenthetical about CPU counts, sorry 😄 i should have been more specific. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ahh, makes sense. Done :) |
||
written in such a way as to not depend on each-other, or on any shared | ||
state. "Shared state" can also include the environment, such as the current | ||
working directory, or environment variables. | ||
|
||
If this is an issue it is possible to control this concurrency, either by | ||
setting the environment variable `RUST_TEST_THREADS`, or by passing the argument | ||
`--test-threads` to the tests: | ||
|
||
```bash | ||
$ RUST_TEST_THREADS=1 cargo test # Run tests with no concurrency | ||
... | ||
$ cargo test -- --test-threads=1 # Same as above | ||
... | ||
``` | ||
|
||
# Test output | ||
|
||
By default Rust's test library captures and discards output to standard | ||
out/error, e.g. output from `println!()`. This too can be controlled using the | ||
environment or a switch: | ||
|
||
|
||
```bash | ||
$ RUST_TEST_NOCAPTURE=1 cargo test # Preserve stdout/stderr | ||
... | ||
$ cargo test -- --nocapture # Same as above | ||
... | ||
``` | ||
|
||
However a better method avoiding capture is to use logging rather than raw | ||
output. Rust has a [standard logging API][log], which provides a frontend to | ||
multiple loggin implementations. This can be used in conjunction with the | ||
default [env_logger] to output any debugging information in a manner that can be | ||
controlled at runtime. | ||
|
||
[log]: https://crates.io/crates/log | ||
[env_logger]: https://crates.io/crates/env_logger |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You seem to be missing something in this sentence.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, will fix.