Skip to content
Back to skills

Debug Test

ASecurity

End-to-end investigation of a single failing unit test. Accepts a test name or pasted xUnit output, runs the test in isolation, reads the test and source files, categorizes the failure, and proposes a targeted fix. Distinct from /fix which handles batch CI output, this skill goes deep on one test at a time. Triggers on: debug this test, debug test, fix failing test, test fails, single test debug.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
testinggobash

Works with

  • cli

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add e128/dotnet-reference --skill debug-test --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Debug Test?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Debug Test
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/e128-debug-test/badge)](https://www.skillsdirectory.com/skills/e128-debug-test)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: debug-test
description: >
  End-to-end investigation of a single failing unit test. Accepts a test name or
  pasted xUnit output, runs the test in isolation, reads the test and source files,
  categorizes the failure, and proposes a targeted fix. Distinct from /fix which
  handles batch CI output, this skill goes deep on one test at a time.
  Triggers on: debug this test, debug test, fix failing test, test fails, single test debug.
argument-hint: "<test-name or pasted xUnit output>"
allowed-tools: Read, Glob, Grep, Bash, Agent
---

Investigate a single failing test end-to-end and propose a fix.

## Step 1: Extract test identifier

From `$ARGUMENTS` or the conversation, identify:
- Full test class name (e.g. `MyService_WhenFoo_DoesBar`)
- Or partial name to filter on
- Or paste of xUnit output (extract the failed test name from it)

If ambiguous, ask once: "Which test should I investigate?"

## Step 2: Run the test in isolation

```bash
scripts/test.sh --json {TestName}
```

Capture: the assertion failure message, exception type, stack trace (first 5 frames only).

## Step 3: Locate and read test file

Locate the file by test class name (try `{TestClass}Tests.cs` and `{TestClass}Test.cs` in `tests/`). Read the full test method that failed, plus the constructor or `IAsyncLifetime` and any shared fixtures used by the test class.

## Step 4: Locate and read source under test

From the test method, identify the system under test and locate its source file in `src/` (`scripts/find.sh --class {ClassName}`). Focus on the method(s) called by the failing test, extract just those with `scripts/code-read.sh --method {Name} {path}`, or map the file first with `scripts/file-outline.sh {path}`. Do not read the entire file unless the class is small.

## Step 5: Categorize the failure

Determine which category best fits:

| Category | Indicators |
|----------|-----------|
| **Assertion mismatch** | Expected X but got Y. Test logic or implementation drift |
| **Null reference / missing setup** | NullReferenceException, missing mock setup, incorrect fixture |
| **Flaky / race condition** | Passes locally sometimes. Involves async, timers, shared state |
| **Missing implementation** | NotImplementedException, method does not exist, interface not wired |
| **Environment / config** | Missing file, wrong path, env variable not set, connection string |

## Step 6: Check sibling tests

Before proposing a fix, check the same test class for other methods sharing the same root cause pattern. If siblings share the bug, note them: "This fix will also resolve {N} sibling tests with the same pattern."

## Step 7: Propose fix

Output:

```
## Test Debug: {TestName}

**Category**: {category}
**Root cause**: {1-2 sentence explanation}

### Fix

{code change or setup correction}

### Also affects
- {sibling test 1} — same root cause
- {sibling test 2} — same root cause

### Verify
scripts/test.sh --json {TestClass}
```

Do NOT apply the fix without user confirmation, present it and wait.

## Notes

- For CI batch failures (many tests), use `/fix` instead
- For flaky async tests, refer to concurrency patterns in `.claude/skills/dotnet-overhaul/steps/step6-patterns.md`
- Always check sibling tests: the "fix the class not the instance" rule applies here too
- If the test was previously passing (use `scripts/branch.sh --json` to review recent commits), check recent
  commits to find the regression-introducing change

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…