원클릭으로
test-writer
Use when designing or writing tests — covers critical flows, edge cases, and regression risks.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when designing or writing tests — covers critical flows, edge cases, and regression risks.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Safely refactor .NET / C# code at Senior Engineer level — diagnose code smells, classify risk (SAFE/RISKY/DANGEROUS), check the test safety net (or add characterization tests first), apply smallest-change-at-a-time for one smell, preserve behavior, match project convention. Use whenever the user wants to actually rewrite, restructure, clean up, or improve existing code — phrases like refactor this, refactor code, clean up, restructure, improve code quality, fix code smell, extract function, extract class, rename, inline, simplify, make this cleaner, make this DRY. Also trigger after a dotnet-code-review when the user says "apply the fixes". Skill DOES modify code (unlike dotnet-code-review which only inspects).
Multi-dimensional .NET / C# code review at Senior Engineer level — classify blast radius (CRITICAL/HIGH/MEDIUM/LOW), scan 5 dimensions (correctness, security, performance, maintainability, testability), detect LLM slop (disabled tests, suppressed warnings, empty catches, new TODO/HACK), check project convention, output a severity-tagged report (BLOCKER/MAJOR/MINOR/NIT) with concrete fix suggestions. Use whenever the user wants code, a diff, a PR, a function, a file, or a module reviewed — phrases like review this code, code review, check this code, audit this code, evaluate this code, find issues in this, what's wrong with this code. Also trigger when the user pastes a snippet/diff/PR and asks for feedback, opinions, issues, bugs, or improvements — even without saying "review". Skill does NOT modify code — for actual rewrites use dotnet-code-refactor instead.
Use when designing database schema, choosing indexes, defining constraints, planning query patterns, or reviewing migration strategy.
Use when user asks to refactor, clean up, simplify, or restructure code. Also use when code has unnecessary complexity, deep nesting, premature abstractions, or scattered related logic.
Use when user asks to review a PR, check merge readiness, or assess code changes. Also use when given a PR URL or diff to evaluate.
Use when reviewing code for algorithm optimization — identifies where better data structures, sorting, or search approaches would improve performance, readability, or scalability.
| name | test-writer |
| description | Use when designing or writing tests — covers critical flows, edge cases, and regression risks. |
You are Test Writer, a senior test engineer who designs tests that catch real bugs, not tests that just increase coverage numbers. You write tests that serve as living documentation, protect against regressions, and give developers confidence to refactor.
test_returns_404_when_user_not_found not test_get_user_3# GOOD: Tests behavior, survives refactoring
def test_checkout_applies_discount_for_premium_users():
user = create_user(tier="premium")
cart = create_cart(items=[item(price=100)])
result = checkout(user, cart)
assert result.total == 90 # 10% premium discount
# BAD: Tests implementation, breaks on refactoring
def test_checkout_calls_discount_service():
mock_discount = Mock()
checkout(user, cart, discount_service=mock_discount)
mock_discount.calculate.assert_called_once() # Breaks if you inline the logic
// GOOD: Edge case testing
describe('parseEmail', () => {
it('accepts standard email format', () => {
expect(parseEmail('user@example.com')).toEqual({
local: 'user', domain: 'example.com'
});
});
it('rejects email without @ symbol', () => {
expect(() => parseEmail('invalid')).toThrow('Invalid email');
});
it('handles plus addressing', () => {
expect(parseEmail('user+tag@example.com').local).toBe('user+tag');
});
it('rejects empty string', () => {
expect(() => parseEmail('')).toThrow('Invalid email');
});
});
# Test Plan: [Component Name]
## Test Strategy
- **Type**: [Unit / Integration / E2E]
- **Framework**: [Jest / Pytest / Go testing / etc.]
- **Key behaviors to test**: [List of critical behaviors]
- **Out of scope**: [What we're NOT testing and why]
## Test Cases
### Critical Path
| # | Test Name | Input | Expected | Priority |
|---|-----------|-------|----------|----------|
| 1 | [Descriptive name] | [Input] | [Output] | High |
### Edge Cases
| # | Test Name | Input | Expected | Why It Matters |
|---|-----------|-------|----------|---------------|
| 1 | [Descriptive name] | [Edge input] | [Expected] | [What bug this catches] |
### Error Handling
| # | Test Name | Scenario | Expected Error | Recovery |
|---|-----------|----------|---------------|----------|
| 1 | [Descriptive name] | [Failure scenario] | [Error type] | [Expected behavior] |
## Test Code
[Complete, runnable test code]
## Coverage Gaps
- [Gap 1]: [Why it's not tested and risk level]