Skill-Details
testing anti-patterns
Language-agnostic test quality and mocking guidance.
Vor Nutzung prüfen
Die automatische Prüfung bewertet Relevanz, nicht Sicherheit oder Empfehlung. Lies vor der Nutzung die Quellanweisungen.
SKILL.md
Dieser Auszug wurde bei der Prüfung gespeichert. Die externe Quelle enthält die vollständige und aktuelle Version.
---
name: testing-anti-patterns
description: Never test mock behavior. Never add test-only methods to production classes. Understand dependencies before mocking. Language-agnostic principles with TypeScript/Jest and Python/pytest examples.
user-invocable: false
disable-model-invocation: true
when_to_use: when writing or changing tests, adding mocks, or tempted to add test-only methods to production code
version: 3.0.0
tags:
- testing
- typescript
- javascript
- python
- pytest
- jest
- mocking
- tdd
- anti-patterns
progressive_disclosure:
entry_point:
summary: "Avoid testing mocks, test-only production methods, and incomplete mocking. Test real behavior, not mock behavior. Covers TypeScript/Jest and Python/pytest."
when_to_use: "When writing tests, adding mocks, reviewing test failures, or tempted to add test-only methods to production code."
quick_start: "1. Ask: 'Am I testing real behavior?' 2. Check: 'Is this method only for tests?' 3. Verify: 'Do I understand what I'm mocking?' 4. Confirm: 'Is my mock complete?' 5. Apply: TDD prevents these patterns"
references:
- core-anti-patterns.md
- completeness-anti-patterns.md
- detection-guide.md
- tdd-connection.md
- python-examples.md
related_skills:
- toolchains-typescript-testing-jest
- toolchains-typescript-testing-vitest
- toolchains-python-testing-pytest
- universal-debugging-systematic-debugging
- universal-debugging-verification-before-completion
---
# 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.
**Following strict TDD prevents these anti-patterns.** See the Test-Driven Development skill (available in the skill library) for the complete TDD workflow.
## When to Use This Skill
Activate this skill when:
- **Writing or changing tests** - Verify tests cover real behavior
- **Adding mocks** - Ensure mocking is necessary and correct
- **Reviewing test failures** - Check if mock behavior is the issue
- **Tempted to add test-only methods** - STOP and reconsider
- **Tests feel overly complex** - Sign of over-mocking
## 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 create incomplete mocks
5. NEVER treat tests as afterthought
```
## Core Anti-Pattern Categories
### 1. Testing Mock Behavior
Asserting on mock elements instead of real behavior. **Fix:** Test real component or don't mock it.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-1-testing-mock-behavior)
### 2. Test-Only Methods in Production
Methods in production classes only used by tests. **Fix:** Move to test utilities.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-2-test-only-methods-in-production)
### 3. Mocking Without Understanding
Mocking without understanding dependencies/side effects. **Fix:** Understand first, mock minimally.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-3-mocking-without-understanding)
### 4. Incomplete Mocks
Partial mocks missing fields downstream code needs. **Fix:** Mirror complete API structure.
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-4-incomplete-mocks)
### 5. Tests as Afterthought
Implementation "complete" without tests. **Fix:** TDD - write test first.
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-5-tests-as-afterthought)
## Quick Detection Checklist
Run this checklist before committing any test:
**Language-agnostic checks:**
```
□ Am I asserting on mock behavior instead of real behavior?
→ TypeScript: testId='*-mock', expect(mock).toHaveBeenCalled()
→ Python: mock.assert_called(), mock.call_count
→ If yes: STOP - Test real behavior or unmock
□ Does Vollständige Quelle auf GitHub lesen (öffnet externe Seite)