rust-testing

Rust Testing Best Practices

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "rust-testing" with this command: npx skills add pproenca/dot-skills/pproenca-dot-skills-rust-testing

Rust Testing Best Practices

Comprehensive testing guide for Rust applications, covering CLI testing, library testing, async patterns, and CI integration. Contains 42 rules across 8 categories, prioritized by impact to guide test design, mocking strategies, and CI optimization.

When to Apply

Reference these guidelines when:

  • Writing unit tests for Rust libraries or modules

  • Creating integration tests for CLI applications

  • Setting up mocking with mockall or trait-based design

  • Testing async code with Tokio

  • Configuring CI pipelines for Rust projects

Rule Categories by Priority

Priority Category Impact Prefix

1 Test Organization CRITICAL org-

2 Mocking and Test Doubles CRITICAL mock-

3 Async Testing HIGH async-

4 Property-Based Testing HIGH prop-

5 Test Fixtures and Setup MEDIUM fix-

6 Assertions and Error Testing MEDIUM assert-

7 CI Integration MEDIUM ci-

8 Test Performance LOW-MEDIUM perf-

Quick Reference

  1. Test Organization (CRITICAL)
  • org-unit-test-modules

  • Use cfg(test) modules for unit tests

  • org-integration-tests-directory

  • Place integration tests in tests directory

  • org-shared-test-utilities

  • Use tests/common/mod.rs for shared utilities

  • org-binary-crate-pattern

  • Extract logic from main.rs into lib.rs

  • org-test-naming

  • Name tests after behavior not implementation

  • org-test-cli-with-assert-cmd

  • Use assert_cmd for CLI testing

  1. Mocking and Test Doubles (CRITICAL)
  • mock-trait-based-design

  • Design for testability with traits

  • mock-automock-attribute

  • Use mockall automock for complex mocking

  • mock-avoid-mocking-owned-types

  • Avoid mocking types you own

  • mock-expect-call-counts

  • Verify mock call counts explicitly

  • mock-predicate-arguments

  • Use predicates to verify mock arguments

  • mock-returning-sequences

  • Use sequences for multiple return values

  • mock-static-methods

  • Use mock! macro for static methods

  1. Async Testing (HIGH)
  • async-tokio-test-macro

  • Use tokio::test for async test functions

  • async-time-control

  • Use paused time for timeout testing

  • async-mock-io

  • Use tokio_test for mocking async IO

  • async-spawn-blocking

  • Test spawn_blocking with multi-threaded runtime

  • async-test-channels

  • Use channels for testing async communication

  1. Property-Based Testing (HIGH)
  • prop-proptest-basics

  • Use proptest for property-based testing

  • prop-custom-strategies

  • Create custom strategies for domain types

  • prop-shrinking

  • Use shrinking to find minimal failing cases

  • prop-invariant-testing

  • Test invariants instead of specific values

  1. Test Fixtures and Setup (MEDIUM)
  • fix-rstest-fixtures

  • Use rstest fixtures for test setup

  • fix-rstest-parametrized

  • Use rstest case for parameterized tests

  • fix-temp-directories

  • Use TempDir for file system tests

  • fix-test-context

  • Use test-context for setup and teardown

  • fix-once-cell-shared-state

  • Use OnceCell for expensive shared setup

  1. Assertions and Error Testing (MEDIUM)
  • assert-specific-errors

  • Assert specific error types not just is_err

  • assert-should-panic

  • Use should_panic for panic testing

  • assert-debug-display

  • Implement Debug for clear failure messages

  • assert-custom-messages

  • Add context to assertions with custom messages

  • assert-floating-point

  • Use approximate comparison for floating point

  • assert-collection-contents

  • Assert collection contents not just length

  1. CI Integration (MEDIUM)
  • ci-cargo-nextest

  • Use cargo-nextest for faster CI

  • ci-caching

  • Cache Cargo dependencies in CI

  • ci-test-isolation

  • Ensure test isolation in parallel CI

  • ci-coverage

  • Generate coverage reports in CI

  1. Test Performance (LOW-MEDIUM)
  • perf-compile-time

  • Reduce test compilation time

  • perf-test-filtering

  • Filter tests for faster feedback loops

  • perf-avoid-io-in-unit-tests

  • Avoid real IO in unit tests

  • perf-parallel-test-execution

  • Configure parallel test threads

  • perf-benchmark-critical-paths

  • Benchmark critical paths with Criterion

How to Use

Read individual reference files for detailed explanations and code examples:

  • Section definitions - Category structure and impact levels

  • Rule template - Template for adding new rules

Reference Files

File Description

references/_sections.md Category definitions and ordering

assets/templates/_template.md Template for new rules

metadata.json Version and reference information

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

zod

No summary provided by upstream source.

Repository SourceNeeds Review
General

clean-architecture

No summary provided by upstream source.

Repository SourceNeeds Review
General

emilkowal-animations

No summary provided by upstream source.

Repository SourceNeeds Review
General

nuqs

No summary provided by upstream source.

Repository SourceNeeds Review