<!--
title: Write focused single-purpose tests
domain: runtimes
topic: Testing
language: Rust
source: tokio-rs/tokio
updated: 2025-05-07
url: https://awesomereviewers.com/reviewers/tokio-write-focused-single-purpose-tests/
-->

Break down large test cases into smaller, focused tests that each verify a single feature or behavior. Each test should have a clear purpose that is evident from its name and structure. This improves test maintainability, readability, and makes failures easier to debug.

Instead of combining multiple test cases:

```rust
#[test]
fn test_channel_behavior() {
    let (tx, rx) = channel();
    // Test multiple behaviors...
    assert!(rx.is_empty());
    tx.send(1).unwrap();
    assert!(!rx.is_empty());
    drop(tx);
    assert!(rx.is_closed());
}
```

Break it into focused tests:

```rust
#[test]
fn is_empty_returns_true_initially() {
    let (_, rx) = channel();
    assert!(rx.is_empty());
}

#[test]
fn is_empty_returns_false_after_send() {
    let (tx, rx) = channel();
    tx.send(1).unwrap();
    assert!(!rx.is_empty());
}

#[test]
fn is_closed_returns_true_after_sender_drop() {
    let (tx, rx) = channel();
    drop(tx);
    assert!(rx.is_closed());
}
```

Key benefits:
- Clear test purpose and failure diagnosis
- Better coverage tracking
- Easier maintenance and updates
- Simpler debugging when tests fail
- More meaningful test names
