About rust-tests-guidelines
rust-tests-guidelines is a set of guidelines for writing tests for Rust code. It is intended for developers who need conventions for test design, organization, and handling C symbols.
Key features
- 01Prefer testing through public APIs
- 02Use insta for hard-to-compare output
- 03Apply proptest to suitable invariants
- 04Organize integration tests by crate
- 05Co-locate tests that need private APIs
- 06Document extern C test requirements
Use cases
- 01Plan tests for a new Rust component
- 02Choose between public and private API tests
- 03Structure a crate's integration tests
- 04Test unpredictable output or key invariants
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ redisearch/ redisearch --skill rust-tests-guidelinesAfter installing, type/rust-tests-guidelinesin Claude Code to confirm it loaded.
Details
From the project READMEGuidelines for Writing Rust Tests
Guidelines for writing new tests for Rust code.
Guidelines
- Test against the public API of the code under test.
- Test private APIs if and only if the private component is highly complex and difficult to test through the public API.
- Use
instawhenever you are testing output that is difficult to predict or compare. - Where appropriate, use
proptestto add property-based tests for key invariants. - Testing code should be written with the same care reserved to production code. Avoid unnecessary duplication, introduce helpers to reduce boilerplate and ensure readability. The intent of a test should be obvious or, if not possible, clearly documented.
- Do not reference exact line numbers in comments, as they may change over time.
Code organization
- Put tests under the
testsdirectory of the relevant crate if they don't rely on private APIs. - The
testsdirectory should be organized as a crate, with amain.rsfile and all tests in modules. Refer to thetrie_rs/testsdirectory as an example. - If the test must rely on private APIs, co-locate them with the code they test, using a
#[cfg(test)]module.
Dealing with extern C symbols
Check out CONTRIBUTING.md for instructions on how to deal with undefined C symbols in Rust tests.
Comments
Markdown supported