LLM Skills
~/catalog/testing & quality//SKILL
Testing & qualityGitHub source

Go Testing

/SKILL

> This skill provides comprehensive Go testing patterns extending common testing principles with Go-specific idioms.

affaan-maffaan-m
240.5k
June 4, 2026
MIT
// skill content

--- name: golang-testing description: > Go testing best practices including table-driven tests, test helpers, benchmarking, race detection, coverage analysis, and integration testing patterns. Use when writing or improving Go tests. metadata: origin: ECC globs: ["*/.go", "/go.mod", "/go.sum"] --- # Go Testing > This skill provides comprehensive Go testing patterns extending common testing principles with Go-specific idioms. ## Testing Framework Use the standard go test with table-driven tests as the primary pattern. ### Table-Driven Tests The idiomatic Go testing pattern: ``go func TestValidateEmail(t *testing.T) { tests := []struct { name string email string wantErr bool }{ { name: "valid email", email: "user@example.com", wantErr: false, }, { name: "missing @", email: "userexample.com", wantErr: true, }, { name: "empty string", email: "", wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := ValidateEmail(tt.email) if (err != nil) != tt.wantErr { t.Errorf("ValidateEmail(%q) error = %v, wantErr %v", tt.email, err, tt.wantErr) } }) } } ` **Benefits:** - Easy to add new test cases - Clear test case documentation - Parallel test execution with t.Parallel() - Isolated subtests with t.Run() ## Test Helpers Use t.Helper() to mark helper functions: `go func assertNoError(t *testing.T, err error) { t.Helper() if err != nil { t.Fatalf("unexpected error: %v", err) } } func assertEqual(t *testing.T, got, want interface{}) { t.Helper() if !reflect.DeepEqual(got, want) { t.Errorf("got %v, want %v", got, want) } } ` **Benefits:** - Correct line numbers in test failures - Reusable test utilities - Cleaner test code ## Test Fixtures Use t.Cleanup() for resource cleanup: `go func testDB(t *testing.T) *sql.DB { t.Helper() db, err := sql.Open("sqlite3", ":memory:") if err != nil { t.Fatalf("failed to open test db: %v", err) } // Cleanup runs after test completes t.Cleanup(func() { if err := db.Close(); err != nil { t.Errorf("failed to close db: %v", err) } }) return db } func TestUserRepository(t *testing.T) { db := testDB(t) repo := NewUserRepository(db) // ... test logic } ` ## Race Detection Always run tests with the -race flag to detect data races: `bash go test -race ./... ` **In CI/CD:** `yaml - name: Test with race detector run: go test -race -timeout 5m ./... ` **Why:** - Detects concurrent access bugs - Prevents production race conditions - Minimal performance overhead in tests ## Coverage Analysis ### Basic Coverage `bash go test -cover ./... ` ### Detailed Coverage Report `bash go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out ` ### Coverage Thresholds `bash # Fail if coverage below 80% go test -cover ./... | grep -E 'coverage: [0-7][0-9]\.[0-9]%' && exit 1 ` ## Benchmarking `go func BenchmarkValidateEmail(b *testing.B) { email := "user@example.com" b.ResetTimer() for i := 0; i < b.N; i++ { ValidateEmail(email) } } ` **Run benchmarks:** `bash go test -bench=. -benchmem ` **Compare benchmarks:** `bash go test -bench=. -benchmem > old.txt # make changes go test -bench=. -benchmem > new.txt benchstat old.txt new.txt ` ## Mocking ### Interface-Based Mocking `go type UserRepository interface { GetUser(id string) (*User, error) } type mockUserRepository struct { users map[string]*User err error } func (m *mockUserRepository) GetUser(id string) (*User, error) { if m.err != nil { return nil, m.err } return m.users[id], nil } func TestUserService(t *testing.T) { mock := &mockUserRepository{ users: map[string]*User{ "1": {ID: "1", Name: "Alice"}, }, } service := NewUserService(mock) // ... test logic } ` ## Integration Tests ### Build Tags `go //go:build integration // +build integration package user_test func TestUserRepository_Integration(t *testing.T) { // ... integration test } ` **Run integration tests:** `bash go test -tags=integration ./... ` ### Test Containers `go func TestWithPostgres(t *testing.T) { if testing.Short() { t.Skip("skipping integration test") } // Setup test container ctx := context.Background() container, err := testcontainers.GenericContainer(ctx, ...) assertNoError(t, err) t.Cleanup(func() { container.Terminate(ctx) }) // ... test logic } ` ## Test Organization ### File Structure `` package/ ├── user.go ├── user_t

// original public source
affaan-m/ECC
/.kiro/skills/golang-testing/SKILL.md
License: MIT
Independent project, not affiliated with Anthropic. This skill remains the property of its original author.
// install this skill
Paste this command in your terminal at the root of your project:
mkdir -p .claude/commands && curl -o ".claude/commands/SKILL.md" "https://raw.githubusercontent.com/affaan-m/ECC/main/.kiro/skills/golang-testing/SKILL.md"
Then in Claude Code, type /SKILL to activate it.
open_in_newOpen original source
// save
Save available after sign in.
loginSign in to save
// information
Creatoraffaan-m
Stars 240.5k
LicenseMIT
UpdatedJune 4, 2026
Format.md
AccessFree
// similar

Skills Testing & quality

View allarrow_forward