go-testing
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.
More from lookatitude/beluga-ai
go-framework
Go framework design patterns for Beluga AI v2. Use when designing package structure, registries, lifecycle, or creating new packages.
12go-interfaces
Go interface design with registry, middleware, and hooks for Beluga AI v2. Use when creating interfaces, extension contracts, or adding hooks/middleware.
8streaming-patterns
Go 1.23 iter.Seq2 streaming patterns for Beluga AI v2. Use when implementing streaming, transforms, or backpressure.
8doc-writing
Documentation writing patterns for Beluga AI v2. Use when creating package docs, tutorials, API guides, or teaching-oriented content.
7provider-implementation
Implementing providers for Beluga AI v2 registries. Use when creating LLM, embedding, vectorstore, voice, or any other provider.
7website-development
Website development patterns for the Beluga AI v2 documentation site. Use when building, styling, or adjusting website components, layouts, pages, and interactive elements — NOT for writing documentation content.
3