Use when writing or changing tests, adding mocks, or tempted to add test-only methods to production code - prevents testing mock behavior, production pollution with test-only methods, and mocking without understanding dependencies, with quantitative anti-pattern detection scoring
View on GitHubkrzemienski/shannon-framework
shannon
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/krzemienski/shannon-framework/blob/main/skills/testing-anti-patterns/SKILL.md -a claude-code --skill testing-anti-patternsInstallation paths:
.claude/skills/testing-anti-patterns/# Testing Anti-Patterns
## Overview
Tests must verify real behavior, not mock behavior. Mocks are a means to isolate, not the thing being tested.
**Core principle**: Test what the code does, not what the mocks do.
**Shannon enhancement**: Automatically detect and score anti-patterns quantitatively.
**Following strict TDD prevents these anti-patterns.**
## The Iron Laws
```
1. NEVER test mock behavior
2. NEVER add test-only methods to production classes
3. NEVER mock without understanding dependencies
4. NEVER use partial/incomplete mocks
5. SHANNON: Track anti-pattern violations quantitatively
```
## Anti-Pattern 1: Testing Mock Behavior
**Severity**: 0.95/1.00 (CRITICAL)
**The violation**:
```typescript
// ❌ BAD: Testing that the mock exists
test('renders sidebar', () => {
render(<Page />);
expect(screen.getByTestId('sidebar-mock')).toBeInTheDocument();
});
```
**Why this is wrong**:
- You're verifying the mock works, not that the component works
- Test passes when mock is present, fails when it's not
- Tells you nothing about real behavior
**Shannon detection**:
```python
# Automatically detect mock behavior testing
def detect_mock_testing(test_code: str) -> float:
"""Returns anti-pattern score 0.00-1.00"""
score = 0.0
# Check for mock-specific test IDs
if re.search(r'getByTestId.*-mock', test_code):
score += 0.50
# Check for assertions on mock existence only
if 'expect(.*mock.*).toBe' in test_code and 'real assertion' not in test_code:
score += 0.45
return min(score, 1.0)
# Track in Serena
anti_pattern_detected = {
"type": "testing_mock_behavior",
"severity": 0.95,
"test_file": test_file,
"line": line_number,
"recommendation": "Test real component behavior, not mock existence"
}
```
**The fix**:
```typescript
// ✅ GOOD: Test real component or don't mock it
test('renders sidebar', () => {
render(<Page />); // Don't mock sidebar
expect(screen.getByRole('navigation')).toBeInThe