跳到正文
cccskills
免费在 GitHub 公开

golang-testing

Write unit tests with table-driven patterns and interface mocking in Go. Use when writing Go unit tests, table-driven tests, or using mock interfaces.

中文简介正在准备中。当前显示原文说明。

实测评分 未实测

查看安装方法

包含的文件(4)

  • SKILL.md3.9 KB
  • evals/evals.json1.9 KB
  • references/mocking-strategies.md854 B
  • references/table-driven-tests.md1.7 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Golang Testing

Priority: P0 (CRITICAL)

Core Rule Anchors

  • [BE-TEST-01] Table-Driven Subtests for Equivalent Cases: Prefer table-driven tests ([]struct{ name, input, expected, expectErr } with t.Run) when functions have multiple equivalent inputs, boundary permutations, or repetitive setup. Distinct scenarios or diverging setup may remain separate test functions; 2-3 distinct cases are fine. Reviewers must not raise stylistic table-driven findings without a behavioral gap.
  • [BE-TEST-02] Ban on Brittle SQLMock String Matching: Do not use sqlmock.ExpectQuery to regex-match raw SQL strings. Test pure domain business calculations directly, or use testcontainers-go for PostgreSQL repository verification.
  • [BE-TEST-03] Ban on Shallow Assertions: Never assert only assert.NoError(t, err) or assert.NotNil(t, result) without inspecting returned domain struct fields, status codes, and invariants.
  • [BE-TEST-04] Ban on Pass-Through Interface Mocks: Repositories and service handlers must test contract compliance and error mapping. Ban 1:1 pass-through mock echoing without contract assertions.
  • [BE-TEST-05] Bug-First Regression Lock: Every PR fixing a bug ticket or with title fix(...) must introduce a test reproducing the defect prior to the fix.

Implementation Workflow

  1. Write failing test first — Follow Red-Green-Refactor TDD workflow ([BE-TEST-05]).
  2. Table-driven tests for equivalent inputs — For parameterized cases sharing setup, define test cases as a slice of structs with t.Run ([BE-TEST-01]).
  3. Zero Volatile Fields for Struct Comparison — When asserting struct equality, zero out timestamps, dynamic IDs, or generated tokens before assert.Equal to prevent flaky assertions.
  4. Mock via interfaces — Use DI and small, consumer-centric interfaces (1-3 methods) ([BE-TEST-04]). Prefer mockery for auto-generated mocks or manual mocks for simple cases.
  5. Run parallel — Use t.Parallel() for non-sequential tests to speed up CI.
  6. Clean up resources — Use t.Cleanup() to restore state or release DB/file resources.
  7. Check coverage — Coverage is diagnostic and project-configured; verify risk-weighted critical paths rather than padding code for an arbitrary percentage.

See table-driven test examples

Tools & Naming

  • Stdlib: testing package (TestXxx(t *testing.T), ExampleXxx()).
  • Testify: Assertions (assert, require) and mocks.
  • Mockery / GoMock: Auto-generate mocks for interfaces.
  • Integration: Prefer testcontainers-go over raw SQL mock strings ([BE-TEST-02]).

Anti-Patterns

  • [BE-TEST-01] No stylistic rewrites: Do not demand table-driven rewrites of passing tests unless 5+ repetitive blocks or a coverage gap exists.
  • [BE-TEST-02] No raw SQL regex matching: Do not match SQL strings in mocks.
  • [BE-TEST-03] No shallow assertions: Never assert only assert.NoError/NotNil without payload inspection.
  • [BE-TEST-04] No pass-through mock echoing: Ban 1:1 mock echoing without contract assertions.
  • [BE-TEST-05] No bug fix without reproduction test.
  • No assert in loops: use t.Run subtests to isolate failures.
  • No brittle assertions on volatile fields: normalize timestamps/dynamic IDs.
  • No global mock state: define mocks locally within test scope.
  • No skipping race detection: always run go test -race in CI.

References

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Upgrade an Android project to Android Gradle Plugin (AGP) 9. Use when migrating to AGP 9, updating Gradle build files, migrating to built-in Kotlin, or adopting the new AGP DSL.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

Apply Clean Architecture layering, modularization, and Unidirectional Data Flow in Android projects. Use when setting up project structure, placing code in layers, configuring feature/core modules, or implementing UDF patterns; defer Compose state and ViewModel/StateFlow implementation to their specific skills.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

Implement WorkManager and background processing correctly on Android. Use when creating Worker classes, scheduling tasks, choosing between WorkManager and Foreground Services, or setting up Hilt in workers; defer FCM and notification delivery to android-notifications.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

Build high-performance declarative UI with Jetpack Compose. Use when writing Composable functions, optimizing recomposition, hoisting state, or working with LazyColumn and side effects; defer deep-link and navigation routing to android-navigation.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

Migrate an Android XML View to Jetpack Compose following a structured 10-step workflow. Use when converting XML layouts to Compose, setting up Compose in an existing View-based project, or incrementally adopting Compose.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

Write correct coroutine scopes, lifecycle collection, and dispatcher injection in Android production code. Use for suspend functions, coroutine scopes, and dispatcher mechanics; defer ViewModel StateFlow/LiveData architecture, Fragment lifecycle recipes, persistence/notifications, and unit-test recipes to their specific skills.

中文简介正在准备中。当前显示原文说明。

HoangNguyen0403/agent-skills-standard5812026年10月24日 更新

查看 HoangNguyen0403 的全部技能

报告此技能的问题