Loading...
Loading...
Audits code for test quality and coverage issues — missing tests, test smells, poor test structure, mock abuse, coverage gaps, and fragile test data. Identifies weaknesses in the test suite and generates fix prompts. Trigger phrases: "test quality", "test audit", "test review", "coverage check", "missing tests", "test quality audit".
npx skill4agent add nishilbhave/codeprobe-claude codeprobe-testing../codeprobe/shared-preamble.md../codeprobe/references/fullExampleTest.phpApp.test.jsvendor/node_modules/| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| Public methods with no corresponding test | Scan source directories for public class methods. For each, check if a corresponding test file/method exists. Use test file naming conventions: | Major |
| Critical business logic untested | Identify classes/methods handling payments, authentication, authorization, order processing, or data mutations. Check whether these have dedicated test coverage. | Major |
| Edge cases unaddressed | When tests exist for a method, check whether they cover: null/empty inputs, boundary values (0, -1, max), error cases, and the happy path. Flag methods with only happy-path tests. | Minor |
| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| Tests with no assertions | Search test methods for assertion calls ( | Major |
| Tests testing implementation details | Tests that mock every dependency and only verify call order/counts rather than outcomes. Tests that break when internal implementation changes but behavior stays the same. Look for excessive | Minor |
| Brittle tests coupled to external state | Tests that depend on database state not set up in the test, file system paths, network calls, or system time without mocking. Look for raw SQL in tests, | Minor |
| Tests dependent on execution order | Tests that pass individually but fail when run together (or vice versa). Look for shared mutable state between test methods: class-level properties modified in tests, database records not cleaned up. | Major |
| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| Missing Arrange-Act-Assert separation | Test methods where setup, execution, and assertion are interleaved rather than clearly separated. Multiple act+assert cycles in one test. | Minor |
| Test names that don't describe the scenario | Test methods named | Minor |
| Single test testing too many things | Test methods with 5+ assertions on unrelated outcomes, or that test multiple scenarios in sequence. Should be split into focused tests. | Minor |
| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| Mocking the system under test | Test creates a mock/partial mock of the class being tested. The test is testing the mock, not the actual code. Look for | Major |
| Mock returning mocks | Mock objects configured to return other mock objects, creating deep mock chains. | Major |
| Over-mocking making tests pass regardless | Tests where every dependency is mocked and the mocks return exactly what the code expects, making the test a tautology. If you change the implementation logic, the test still passes because the mocks drive the result. | Minor |
| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| No tests for error/exception paths | Methods with try/catch blocks or error handling where tests only cover the success path. No test triggers the catch/error branch. | Minor |
| No tests for authorization logic | Permission checks, policy methods, gate definitions, middleware authorization — code that controls access but has no dedicated tests. | Major |
| No edge case tests | Functions handling arrays/collections without tests for empty input. Numeric functions without tests for zero, negative, or boundary values. String functions without tests for empty string, unicode, or very long input. | Minor |
| ID Prefix | What to Detect | How to Detect | Severity |
|---|---|---|---|
| Hardcoded IDs that may collide | Tests using hardcoded numeric IDs ( | Minor |
| Fragile factory/fixture setup | Tests with complex inline data setup that duplicates across multiple tests instead of using factories/fixtures/builders. | Minor |
| Tests relying on specific database state | Tests that assume certain records exist in the database without creating them in the test setup. Depends on seeders or previous test execution. | Minor |
TEST-TEST-001TEST-002OrderService@calculateTotalOrderFactorytests/Unit/Services/OrderServiceTest.phptest_user_can_logintests/Feature/AuthTest.php:25assertStatus(200)assertAuthenticated()assertJsonStructure(['token'])tests/Unit/PaymentServiceTest.php:40FakePaymentGateway42tests/Feature/OrderTest.php:15User::factory()->create()->id