brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
golang-testingWrite unit tests with table-driven patterns and interface mocking in Go. Use when writing Go unit tests, table-driven tests, or using mock interfaces.
Independent GitHub snapshot · Automated classification · Original documentation governs
[BE-TEST-01] Table-Driven Subtests for Equivalent Cases: Prefer table-driven tests ([]struct{ name, input, expected, expectErr } with t.Run) when functions have multiple equivalent inputs, boundary permutations, or repetitive setup. Distinct scenarios or diverging setup may remain separate test functions; 2-3 distinct cases are fine. Reviewers must not raise stylistic table-driven findings without a behavioral gap.[BE-TEST-02] Ban on Brittle SQLMock String Matching: Do not use sqlmock.ExpectQuery to regex-match raw SQL strings. Test pure domain business calculations directly, or use testcontainers-go for PostgreSQL repository verification.[BE-TEST-03] Ban on Shallow Assertions: Never assert only assert.NoError(t, err) or assert.NotNil(t, result) without inspecting returned domain struct fields, status codes, and invariants.[BE-TEST-04] Ban on Pass-Through Interface Mocks: Repositories and service handlers must test contract compliance and error mapping. Ban 1:1 pass-through mock echoing without contract assertions.[BE-TEST-05] Bug-First Regression Lock: Every PR fixing a bug ticket or with title fix(...) must introduce a test reproducing the defect prior to the fix.[BE-TEST-05]).t.Run ([BE-TEST-01]).assert.Equal to prevent flaky assertions.[BE-TEST-04]). Prefer mockery for auto-generated mocks or manual mocks for simple cases.t.Parallel() for non-sequential tests to speed up CI.t.Cleanup() to restore state or release DB/file resources.See table-driven test examples
testing package (TestXxx(t *testing.T), ExampleXxx()).assert, require) and mocks.testcontainers-go over raw SQL mock strings ([BE-TEST-02]).[BE-TEST-01] No stylistic rewrites: Do not demand table-driven rewrites of passing tests unless 5+ repetitive blocks or a coverage gap exists.[BE-TEST-02] No raw SQL regex matching: Do not match SQL strings in mocks.[BE-TEST-03] No shallow assertions: Never assert only assert.NoError/NotNil without payload inspection.[BE-TEST-04] No pass-through mock echoing: Ban 1:1 mock echoing without contract assertions.[BE-TEST-05] No bug fix without reproduction test.t.Run subtests to isolate failures.go test -race in CI.