Test Fix
Systematic approach to diagnosing and fixing failing tests.
Process
Step 1: Identify Failing Tests
cargo test --all cargo test test_name -- --exact --nocapture
Step 2: Reproduce Locally
With debug logging
RUST_LOG=debug cargo test test_name
Force single-threaded for race conditions
cargo test test_name -- --test-threads=1
Step 3: Diagnose Root Cause
Pattern Symptom Fix
Async/Await "future cannot be sent" Add .await , use Arc
Database "connection refused" Check env vars, use test DB
Race Intermittent assertion failure Add Mutex, sequential execution
Type "expected X, found Y" Update signatures, add conversions
Lifetime "borrowed value" Clone data, adjust lifetimes
Step 4: Verify Fix
Run multiple times
for i in {1..10}; do cargo test test_name -- --exact || break; done
Run full suite
cargo test --all
Step 5: Regression Prevention
Add test for the specific bug that was fixed.
Debugging Checklist
-
Run failing test in isolation
-
Check environment variables
-
Review recent changes
-
Check for missing .await
-
Verify database connections
-
Look for race conditions
-
Check type compatibility
Tools
Debug logging
RUST_LOG=debug cargo test
Full backtrace
RUST_BACKTRACE=full cargo test
Specific module
RUST_LOG=memory_core=debug cargo test
When to Skip vs Fix
Skip (temporarily):
-
External service down
-
Platform-specific issue
-
Known upstream bug
Fix immediately:
-
Logic error
-
Incorrect assertion
-
Missing error handling