协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
golang-testing【开发与工程】Write unit tests with table-driven patterns and interface mocking in Go. Use when writing Go unit tests, table-driven tests, or using mock interfaces.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
[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.