golang-testing
Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs see `samber/cc-skills-golang@golang-stretchr-testify`; for measurement methodology see `samber/cc-skills-golang@golang-benchmark`. Skill: golang-testing Owner: samber Summary: Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs
Rank
62
Safety
84
Downloads
1.7k
Updated
Oct 10, 2026
Version
1.3.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.7K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.7K downloadsadoption · observed Oct 10, 2026
- Latest release
- 1.3.0release · observed Aug 23, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s173arkhs3131fq5jf769qq75583hdgt:golang-testing- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-samber-golang-testing/snapshot"
Documentation
CLAWHUB
145,339 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: golang-testing
description: "Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs see `samber/cc-skills-golang@golang-stretchr-testify`; for measurement methodology see `samber/cc-skills-golang@golang-benchmark`."
user-invocable: true
license: MIT
compatibility: Designed for Claude Code, Codex or similar harness, and for projects using Golang.
metadata:
author: samber
version: "1.3.0"
openclaw:
emoji: "🧪"
homepage: https://github.com/samber/cc-skills-golang
requires:
bins:
- go
- gotests
install:
- kind: go
package: github.com/cweill/gotests/gotests@latest
bins: [gotests]
allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent Bash(gotests:*) AskUserQuestion
paths:
- "**/*.go"
---
**Persona:** You are a Go engineer who treats tests as executable specifications. You write tests to constrain behavior, not to hit coverage targets.
**Thinking mode:** Reason as thoroughly as possible for test strategy design and failure analysis — shallow reasoning misses edge cases and produces brittle tests that pass today but break tomorrow. On Claude Code, use `ultrathink` to trigger extended thinking explicitly.
**Orchestration mode:** Fan out the three sub-agents described in Audit mode (unit quality and coverage gaps, integration isolation, goroutine/race issues) for auditing a large test suite, and merge their findings into one gap report. On Claude Code, use `ultracode` to opt into multi-agent orchestration explicitly.
**Modes:**
- **Write mode** — generating new tests for existing or new code. Work sequentially through the code under test; use `gotests` to scaffold table-driven tests, then enrich with edge cases and error paths.
- **Review mode** — reviewing a PR's test changes. Focus on the diff: check coverage of new behaviour, assertion quality, table-driven structure, and absence of flakiness patterns. Sequential.
- **Audit mode** — auditing an existing test suite for gaps, flakiness, or bad patterns (order-dependent tests, missing `t.Parallel()`, implementation-detail coupling). Launch up to 3 parallel sub-agents split by concern: (1) unit test quality and coverage gaps, (2) integration test isolation and build tags, (3) goroutine leaks and race conditions.
- **Debug mode** — a test is failing or flaky. Work sequentially: reproduce reliably, isolate the failing assertion, trace the root cause in production code or test setup.
> **Community default.** A company skill that explicitly supersedes `samber/cc-skills-golang@golang-testing` skill takes precedence.
**Dependencies:**
- gotests: `go install github.com/cweill/go_meta.json
{
"ownerId": "kn72rhnkwjfeex9wr1n7y24qa983cjn3",
"slug": "golang-testing",
"version": "1.3.0",
"publishedAt": 1787472410569
}references/helpers.md
# Test Helpers
## Test Timeout
For tests that may hang, use a timeout helper that panics with caller location:
```go
// https://github.com/stretchr/testify/issues/1101
func testWithTimeout(t *testing.T, timeout time.Duration) {
t.Helper()
testFinished := make(chan struct{})
t.Cleanup(func() {
close(testFinished)
})
var pc [1]uintptr
n := runtime.Callers(2, pc[:])
line, funcName := "", ""
if n > 0 {
frames := runtime.CallersFrames(pc[:])
frame, _ := frames.Next()
line = frame.File + ":" + strconv.Itoa(frame.Line)
funcName = frame.Function
}
go func() {
select {
case <-testFinished:
case <-time.After(timeout):
panic(fmt.Sprintf("%s: Test timed out after: %v\n%s", funcName, timeout, line))
}
}()
}
// Usage
func TestLongRunningOperation(t *testing.T) {
testWithTimeout(t, 2*time.Second)
result := LongRunningOperation()
// If this takes longer than 2 seconds, the test panics with location info
}
```references/http-testing.md
# HTTP Handler Testing
Use `httptest` package for testing HTTP handlers without starting a server.
## Basic Handler Test
```go
func TestCreateUserHandler(t *testing.T) {
tests := []struct {
name string
body string
expectedStatus int
}{
{
name: "valid request",
body: `{"name": "Alice", "email": "[email protected]"}`,
expectedStatus: http.StatusCreated,
},
{
name: "invalid JSON",
body: `invalid json`,
expectedStatus: http.StatusBadRequest,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
is := assert.New(t)
req := httptest.NewRequest(http.MethodPost, "/users", strings.NewReader(tt.body))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
handler := http.HandlerFunc(CreateUserHandler)
handler.ServeHTTP(w, req)
is.Equal(tt.expectedStatus, w.Code)
})
}
}
```
## Query Parameters and Headers
```go
func TestListUsersHandler(t *testing.T) {
tests := []struct {
name string
query string
authHeader string
expectedStatus int
}{
{
name: "paginated results",
query: "?page=1&limit=10",
authHeader: "Bearer token123",
expectedStatus: http.StatusOK,
},
{
name: "missing auth",
query: "?page=1",
authHeader: "",
expectedStatus: http.StatusUnauthorized,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
is := assert.New(t)
req := httptest.NewRequest(http.MethodGet, "/users"+tt.query, nil)
if tt.authHeader != "" {
req.Header.Set("Authorization", tt.authHeader)
}
w := httptest.NewRecorder()
handler := AuthMiddleware(ListUsersHandler)
handler.ServeHTTP(w, req)
is.Equal(tt.expectedStatus, w.Code)
})
}
}
```references/integration-testing.md
# Integration Testing
## Docker Compose Fixture
Create `pkg/myfeature/testdata/docker-compose.yml` for test services:
```yaml
version: "3.8"
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: testdb
ports:
- "5433:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U test"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
ports:
- "6380:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
```
## SQL Schema Fixture
Create `pkg/myfeature/testdata/schema.sql` for database initialization:
```sql
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS orders (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
amount DECIMAL(10,2) NOT NULL,
status VARCHAR(50) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
## Test Data Fixture
Create `pkg/myfeature/testdata/testdata.sql`:
```sql
INSERT INTO users (name, email) VALUES
('Alice Johnson', '[email protected]'),
('Bob Smith', '[email protected]'),
('Charlie Brown', '[email protected]');
INSERT INTO orders (user_id, amount, status) VALUES
(1, 100.00, 'completed'),
(1, 50.00, 'pending'),
(2, 200.00, 'completed');
```
## Using Fixtures in Tests
```go
//go:build integration
package database_test
import (
"database/sql"
"os"
"os/exec"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
type DatabaseTestSuite struct {
suite.Suite
db *sql.DB
}
func (s *DatabaseTestSuite) SetupSuite() {
cmd := exec.Command("docker-compose", "-f", "testdata/docker-compose.yml", "up", "-d")
if err := cmd.Run(); err != nil {
s.T().Fatalf("failed to start docker-compose: %v", err)
}
time.Sleep(5 * time.Second)
db, err := sql.Open("postgres", "postgres://test:test@localhost:5433/testdb?sslmode=disable")
if err != nil {
s.T().Fatalf("failed to connect to database: %v", err)
}
s.db = db
schema, _ := os.ReadFile("testdata/schema.sql")
_, err = db.Exec(string(schema))
if err != nil {
s.T().Fatalf("failed to run schema: %v", err)
}
}
func (s *DatabaseTestSuite) TearDownSuite() {
cmd := exec.Command("docker-compose", "-f", "testdata/docker-compose.yml", "down", "-v")
_ = cmd.Run()
}
func (s *DatabaseTestSuite) SetupTest() {
_, err := s.db.Exec("TRUNCATE TABLE orders, users CASCADE")
if err != nil {
s.T().Fatalf("failed to clear database: %v", err)
}
testdata, _ := os.ReadFile("testdata/testdata.sql")
_, err = s.db.Exec(string(testdata))
if err != nil {
s.T().Fatalf("faiAionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/samber/skills/golang-testing",
"sourceUrl": "https://clawhub.ai/samber/skills/golang-testing",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T04:24:21.762Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-samber-golang-testing/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-samber-golang-testing/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T04:24:21.762Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.7K downloads",
"href": "https://clawhub.ai/samber/golang-testing",
"sourceUrl": "https://clawhub.ai/samber/golang-testing",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T04:24:21.762Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.3.0",
"href": "https://clawhub.ai/samber/golang-testing",
"sourceUrl": "https://clawhub.ai/samber/golang-testing",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-23T08:06:50.569Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-samber-golang-testing/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-samber-golang-testing/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.3.0",
"description": "Version 1.3.0 of golang-testing makes test file structure requirements explicit and adds orchestration guidance for advanced audit workflows. - Clarifies that test files must be named after the source file under test (not the function/method), enhancing navigation and tool compatibility. - Advises maintaining test function order to match source file order, aiding readability. - Documents rare exceptions for splitting large test files. - Adds orchestration mode instructions for audit sub-agents and merging reports, with explicit knobs for Claude Code (ultrathink, ultracode). - Updates compatibility metadata to include Codex-style harnesses. - Removes skill-card.md file.",
"href": "https://clawhub.ai/samber/golang-testing",
"sourceUrl": "https://clawhub.ai/samber/golang-testing",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-23T08:06:50.569Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
