go-testing
SKILL.md
Go Testing Patterns
Table-Driven Tests
func TestGenerate(t *testing.T) {
tests := []struct {
name string
input []schema.Message
want *schema.AIMessage
wantErr error
}{
{name: "simple", input: []schema.Message{schema.HumanMessage("hello")}, want: &schema.AIMessage{...}},
{name: "empty input errors", input: nil, wantErr: &core.Error{Code: core.ErrInvalidInput}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := model.Generate(context.Background(), tt.input)
if tt.wantErr != nil { require.Error(t, err); return }
require.NoError(t, err)
assert.Equal(t, tt.want, got)
})
}
}
Stream + Context Cancellation
func TestStreamCancellation(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
count := 0
for _, err := range model.Stream(ctx, msgs) {
count++
if count == 2 { cancel() }
if err != nil { assert.ErrorIs(t, err, context.Canceled); break }
}
assert.LessOrEqual(t, count, 3)
}
Mocks
Location: internal/testutil/mock<package>/. Every mock has configurable function fields + error injection + call counting.
Rules
*_test.goalongside source, not in separate dirs.- Use
testify/assert(non-fatal) andtestify/require(fatal). - Integration tests:
//go:build integrationtag,*_integration_test.go. - Benchmarks:
*_bench_test.go,b.ReportAllocs(),b.RunParallel(). - Compile-time check:
var _ Interface = (*Impl)(nil). - Always test: error paths, context cancellation for streams, nil/empty inputs.
Weekly Installs
2
Repository
lookatitude/beluga-aiGitHub Stars
9
First Seen
14 days ago
Security Audits
Installed on
opencode2
gemini-cli2
codebuddy2
github-copilot2
codex2
kimi-cli2