Go Testing & Quality
Idiomatic, 2026-current testing and quality practices for Go, built on the standard
testing package with testify where it adds clarity.
Use when:
- Writing unit tests for Go code (table-driven, subtests)
- Adding assertions or mocks with
testify (assert / require / mock)
- Writing fuzz tests, benchmarks, or example tests
- Measuring coverage (
go test -cover) or chasing race conditions (-race)
- Profiling / optimizing with pprof or setting up PGO
- Reviewing an existing Go test suite for quality gaps
Do NOT use for:
- Project layout, routing, DB wiring, DI — use
go-architecture
- SOLID line-limit / interface enforcement — use
fuse-solid:solid-go
- Non-Go test suites (Pest, Vitest, Jest, cargo test) — use the matching expert
- Security scanning / CVE audit — use
fuse-security
Decision Map
| Goal |
Load |
| Write the standard Go test (table-driven + subtests) |
table-driven.md |
| Assertions and mocks with testify |
testify-mocks.md |
| Fuzzing, benchmarks, example tests |
fuzzing-benchmarks.md |
| Coverage, race detector, pprof, PGO |
coverage-profiling.md |
| A complete, runnable test file to copy |
templates/table-test.md |
Core Practices (2026)
- Table-driven tests are the idiom. Define a slice of cases, loop, and run
each as a subtest with
t.Run(tc.name, …) for isolation and readable output.
testify is the de-facto assertion/mock standard. assert for soft checks,
require to abort on failure, mock for hand-written mocks, suite for
setup/teardown groups. It is maintained at v1 (no breaking v2).
Source: https://pkg.go.dev/github.com/stretchr/testify
- Fuzzing is native since Go 1.18 (
func FuzzXxx(f *testing.F)), and finds
edge cases table tests miss.
- Always run
-race in CI. The race detector catches data races that are
otherwise nondeterministic and unreproducible.
- Measure before optimizing. Benchmarks (
go test -bench) + pprof profiles
guide real changes; PGO feeds a production profile back into the compiler.
Workflow
- Explore the code under test and existing test conventions first.
- Write table-driven tests as the default shape (table-driven.md).
- Add testify assertions/mocks where they improve readability, not reflexively.
- Run
go test ./... -race -cover and inspect gaps.
- Fuzz / benchmark hotspots and parsers (fuzzing-benchmarks.md).
- Profile only after a benchmark proves a hotspot (coverage-profiling.md).
- Validate with sniper after changes.
Boundaries
Overlaps with github.com/samber/cc-skills-golang (community Go skills) — this
skill owns testing and quality tooling; architecture/structure lives in
go-architecture. Cross-referenced for boundaries only, not copied.
1---2name: go-testing-quality3description: Use when writing or reviewing Go tests, adding coverage, benchmarking, or profiling a Go program. Not for CI/lint wiring (go-tooling-security) or non-Go tests.4---56<objective>7Covers idiomatic Go testing and quality practices built on the standard testing8package plus testify: table-driven tests, subtests with t.Run, testify9assertions/mocks, native fuzzing, benchmarks, the race detector, coverage, and10pprof/PGO profiling. Does not cover CI pipeline wiring — golangci-lint,11govulncheck (see go-tooling-security) — or non-Go test suites.12</objective>1314# Go Testing & Quality1516Idiomatic, 2026-current testing and quality practices for Go, built on the standard17`testing` package with `testify` where it adds clarity.1819**Use when:**20- Writing unit tests for Go code (table-driven, subtests)21- Adding assertions or mocks with `testify` (`assert` / `require` / `mock`)22- Writing fuzz tests, benchmarks, or example tests23- Measuring coverage (`go test -cover`) or chasing race conditions (`-race`)24- Profiling / optimizing with pprof or setting up PGO25- Reviewing an existing Go test suite for quality gaps2627**Do NOT use for:**28- Project layout, routing, DB wiring, DI — use `go-architecture`29- SOLID line-limit / interface enforcement — use `fuse-solid:solid-go`30- Non-Go test suites (Pest, Vitest, Jest, cargo test) — use the matching expert31- Security scanning / CVE audit — use `fuse-security`3233---3435## Decision Map3637| Goal | Load |38|------|------|39| Write the standard Go test (table-driven + subtests) | [table-driven.md](references/table-driven.md) |40| Assertions and mocks with testify | [testify-mocks.md](references/testify-mocks.md) |41| Fuzzing, benchmarks, example tests | [fuzzing-benchmarks.md](references/fuzzing-benchmarks.md) |42| Coverage, race detector, pprof, PGO | [coverage-profiling.md](references/coverage-profiling.md) |43| A complete, runnable test file to copy | [templates/table-test.md](references/templates/table-test.md) |4445---4647## Core Practices (2026)48491. **Table-driven tests are the idiom.** Define a slice of cases, loop, and run50 each as a subtest with `t.Run(tc.name, …)` for isolation and readable output.512. **`testify` is the de-facto assertion/mock standard.** `assert` for soft checks,52 `require` to abort on failure, `mock` for hand-written mocks, `suite` for53 setup/teardown groups. It is maintained at v1 (no breaking v2).54 Source: https://pkg.go.dev/github.com/stretchr/testify553. **Fuzzing is native** since Go 1.18 (`func FuzzXxx(f *testing.F)`), and finds56 edge cases table tests miss.574. **Always run `-race` in CI.** The race detector catches data races that are58 otherwise nondeterministic and unreproducible.595. **Measure before optimizing.** Benchmarks (`go test -bench`) + pprof profiles60 guide real changes; PGO feeds a production profile back into the compiler.6162---6364## Workflow65661. **Explore** the code under test and existing test conventions first.672. **Write table-driven tests** as the default shape ([table-driven.md](references/table-driven.md)).683. **Add testify** assertions/mocks where they improve readability, not reflexively.694. **Run** `go test ./... -race -cover` and inspect gaps.705. **Fuzz / benchmark** hotspots and parsers ([fuzzing-benchmarks.md](references/fuzzing-benchmarks.md)).716. **Profile** only after a benchmark proves a hotspot ([coverage-profiling.md](references/coverage-profiling.md)).727. **Validate** with sniper after changes.7374---7576## Boundaries7778Overlaps with `github.com/samber/cc-skills-golang` (community Go skills) — this79skill owns **testing and quality tooling**; architecture/structure lives in80`go-architecture`. Cross-referenced for boundaries only, not copied.