24.7 Test Dependencies

Tests, examples, or benchmarks might require helper crates not needed by the main application or library code. These dependencies should be specified under the [dev-dependencies] section in your Cargo.toml file.

# Cargo.toml
[package]
name = "my_crate"
version = "0.1.0"
edition = "2021"

[dependencies]
# Regular dependencies used by src/lib.rs or src/main.rs
# Example: serde = { version = "1.0", features = ["derive"] }

[dev-dependencies]
# Dependencies only compiled for tests, examples, benchmarks
# Example: provides improved assertion diffs
pretty_assertions = "1.4"
# Example: helps create temporary files/directories for tests
tempfile = "3.10"

Cargo only compiles dev-dependencies when building targets that might need them (tests, examples, benchmarks). They are not included when a user depends on your library crate, nor are they included in release builds of binary crates unless explicitly used by src/main.rs (which is usually not the case).

Example using pretty_assertions: This popular dev-dependency provides replacements for assert_eq! and assert_ne! that produce colorful, detailed diff output when comparing complex structures, making failures much easier to diagnose.

// In src/lib.rs within #[cfg(test)] mod tests { ... }
// Or in a file within the tests/ directory

#[cfg(test)]
mod diff_tests {
    // Use the enhanced assertion macro from the dev-dependency
    use pretty_assertions::assert_eq;

    #[derive(Debug, PartialEq)]
    struct ComplexData {
        id: u32,
        name: String,
        values: Vec<i32>,
    }

    #[test]
    fn test_complex_data_equality() {
        let expected = ComplexData {
            id: 101,
            name: "Example".to_string(),
            values: vec![1, 2, 3, 4, 5],
        };
        let actual = ComplexData {
            id: 101,
            name: "Example".to_string(),
            values: vec![1, 2, 99, 4, 5], // Mismatch in the middle
        };

        // The standard assert_eq! would show the full structs.
        // pretty_assertions::assert_eq! shows a focused diff.
        assert_eq!(expected, actual);
    }
}