positive | Verifies expected behavior under normal/valid conditions | Asserts success, valid output, expected state, no exceptions for valid input |
negative | Verifies correct handling of invalid input, errors, or edge cases | Asserts exceptions, error codes, validation failures, rejects bad input |
boundary | Tests limits, thresholds, empty/null inputs, min/max values | Operates on 0, -1, int.MaxValue, empty string, null, empty collection, boundary of valid range |
critical-path | Core workflow that must never break; breakage blocks users | Tests the primary success scenario of a key public API or user-facing feature |
smoke | Quick sanity check that the system is operational | Fast, no complex setup, verifies basic wiring (e.g., service resolves, endpoint returns 200) |
regression | Reproduces a specific previously-reported bug | References a bug ID, issue number, or describes a fix in its name or comments |
integration | Crosses process, network, or persistence boundaries | Uses real database, HTTP client, file system, external service, or multi-component setup |
end-to-end | Full user workflow spanning the entire application stack | Exercises a complete scenario from entry point to final result, distinct from single-boundary integration |
performance | Validates timing, throughput, or resource consumption | Asserts on elapsed time, memory, allocations, or uses benchmark harness |
security | Verifies authentication, authorization, input sanitization, or secrets handling | Tests for SQL injection, XSS, CSRF, unauthorized access, token validation, permission checks |
concurrency | Validates thread safety, parallelism, or async correctness | Uses Task.WhenAll, locks, Parallel.ForEach, SemaphoreSlim, reproduces race conditions |
resilience | Tests retry logic, timeouts, circuit breakers, or graceful degradation | Asserts behavior under transient failures, network drops, or service unavailability (e.g., Polly policies) |
destructive | Mutates shared or external state that is hard to roll back | Deletes records, drops resources, modifies global config -- useful for CI isolation decisions |
configuration | Verifies settings loading, defaults, environment behavior | Tests missing config keys, invalid values, environment variable fallbacks, options validation |
flaky | Known to intermittently fail (meta-tag for test health tracking) | Mark tests the team knows are unreliable; used to quarantine or prioritize stabilization |