--- description: "Testing conventions: Arrange/Act/Assert structure, naming, mocking strategy, coverage targets, test independence" globs: ["**/*test*", "**/*spec*", "**/*Test*", "**/tests/**", "**/test/**"] --- # Testing - Structure every test with `//Arrange`, `//Act`, `//Assert` comments - One assertion per test when practical; name tests descriptively: `MethodName_Scenario_ExpectedResult` - Test boundary conditions, error paths, and happy paths - Use mocks only for external dependencies; prefer real implementations for internal code - Aim for 80%+ coverage on business logic; 100% on critical paths - Integration tests use real database (Postgres testcontainers or dedicated test DB) - Never use Thread Sleep or fixed delays in tests; use polling or async waits - Keep test data factories/builders for reusable test setup - Tests must be independent: no shared mutable state between tests