rust-testing

Master Rust testing - unit tests, integration tests, mocking, and TDD

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 pluginagentmarketplace/custom-plugin-rust/pluginagentmarketplace-custom-plugin-rust-rust-testing

Rust Testing Skill

Master comprehensive testing in Rust: unit tests, integration tests, doc tests, property testing, and mocking.

Quick Start

Unit Tests

pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add_positive() {
        assert_eq!(add(2, 3), 5);
    }

    #[test]
    fn test_add_negative() {
        assert_eq!(add(-1, -1), -2);
    }

    #[test]
    #[should_panic(expected = "overflow")]
    fn test_overflow() {
        panic!("overflow");
    }

    #[test]
    #[ignore]
    fn expensive_test() {
        // Run with: cargo test -- --ignored
    }
}

Integration Tests

// tests/integration_test.rs
use my_crate::public_api;

#[test]
fn test_full_workflow() {
    let result = public_api::process("input");
    assert!(result.is_ok());
}

mod common;  // tests/common/mod.rs

#[test]
fn test_with_setup() {
    let ctx = common::setup();
    // test...
}

Doc Tests

/// Adds two numbers.
///
/// # Examples
///
/// ```
/// let result = my_lib::add(2, 2);
/// assert_eq!(result, 4);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

Test Commands

cargo test                      # All tests
cargo test test_name            # Specific test
cargo test -- --nocapture       # Show output
cargo test -- --ignored         # Ignored tests
cargo test --doc                # Doc tests only
cargo nextest run               # Fast parallel

Common Patterns

Async Tests

#[tokio::test]
async fn test_async_operation() {
    let result = async_function().await;
    assert!(result.is_ok());
}

Property Testing

use proptest::prelude::*;

proptest! {
    #[test]
    fn test_commutative(a in 0i32..1000, b in 0i32..1000) {
        assert_eq!(add(a, b), add(b, a));
    }
}

Mocking

use mockall::automock;

#[automock]
trait Database {
    fn get(&self, id: u32) -> Option<String>;
}

#[test]
fn test_with_mock() {
    let mut mock = MockDatabase::new();
    mock.expect_get()
        .returning(|_| Some("data".to_string()));
}

Troubleshooting

ProblemSolution
Test not foundCheck module path
Async failsAdd #[tokio::test]
Random failuresUse --test-threads=1

Resources

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.

Automation

error-handling

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

rust-wasm

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

rust-performance

No summary provided by upstream source.

Repository SourceNeeds Review