testify

The essential Go toolkit for assertions, mocks, and structured test suites.

Library
Go
vv1.12.1
26,217 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
75 /100 Good
Development Activity 76
Maintenance 56
Community 68
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
84 /100 Excellent
Architecture 85
Code Quality 88
Innovation 80
Learning Curve 88

Testify is the most widely used testing toolkit for Go, providing a comprehensive set of assertion helpers, a mocking framework, and a structured test-suite system that plays nicely with the standard testing package. Rather than replacing Go’s built-in test runner, it layers ergonomic, readable APIs on top of it, cutting boilerplate from equality checks, error handling, and object mocking in day-to-day test code.

With hundreds of contributors and more than a decade of production use across the Go ecosystem, testify has become a near-default dependency in Go projects of every size, from small CLIs to large distributed systems, valued for its stability, minimal external surface, and tight integration with go test.

What You Get

  • assert package with 100+ assertion functions (Equal, Nil, Error, Contains, Len, and more) that print human-readable failure diffs
  • require package mirroring assert but calling t.FailNow() to halt the test immediately on failure
  • mock package for building mock objects with expectation-based call verification (On/Return/AssertExpectations)
  • suite package for grouping tests as struct methods with SetupTest/TearDownTest lifecycle hooks
  • A testifylint linter (via golangci-lint) that catches common assertion misuse

Common Use Cases

  • Asserting expected vs actual values in unit tests without hand-writing comparison and error-formatting code
  • Mocking external dependencies (HTTP clients, databases, third-party APIs) to isolate the unit under test
  • Structuring integration-style tests as a suite with shared setup/teardown across many related test methods
  • Enforcing fail-fast behavior on prerequisite checks via require so a broken precondition doesn’t cascade into confusing downstream failures

Under The Hood

Architecture Testify is organized as four largely independent packages that share a common internal core: assert (raw boolean-returning assertion functions plus a generated require-style companion), require (a codegen-generated mirror of assert that calls t.FailNow() on failure, built from require.go.tmpl via go:generate), mock (a Mock/Call/Arguments object model layered on testify/assert for value comparison and stretchr/objx for structured argument objects), and suite (a Suite struct plus lifecycle hooks like SetupTest/TearDownTest that suite.Run drives via reflection over Test* methods). Shared formatting and diffing logic lives in internal/difflib (a Python difflib port) and internal/spew (a vendored pretty-printer), so all four public packages produce consistent, readable failure output. Code generation (assertion_format.go.tmpl, require.go.tmpl, driven by the _codegen tool) keeps require and the formatted-assertion variants mechanically in sync with the hand-written comparison logic in assertion_compare.go and assertions.go.

Tech Stack The module targets Go 1.17+ with a minimal dependency footprint: github.com/stretchr/objx v0.5.3 (structured mock argument access) and gopkg.in/yaml.v3 v3.0.1 (YAML equality assertions). There is no build system beyond the standard go build/go generate toolchain — _codegen is a small internal Go program invoked via go:generate directives, and CI runs go test across supported Go versions. No external services, databases, or runtime dependencies are involved; it is a pure compile-time test-support library.

Code Quality Testify is thoroughly self-tested: 21 _test.go files across the repo, including assertions_test.go, mock_test.go, and suite_test.go, exercise the library’s own assertion, mocking, and suite-lifecycle behavior. Core files like assert/assertions.go (2,314 lines) and mock/mock.go (1,311 lines) are large but organized into clearly delimited, doc-commented functions, and generated files are explicitly marked with “Code generated with” headers per CONTRIBUTING.md, so hand-written and generated code stay unambiguous. Error handling favors explicit boolean returns and TestingT.Errorf/FailNow() calls over panics, consistent with idiomatic Go testing conventions; the project also ships MAINTAINERS.md and EMERITUS.md, signaling active ownership.

API Design Testify’s defining design choice is layering two near-identical APIs — assert (returns bool, continues the test) and require (calls t.FailNow(), halts the test) — over the same underlying comparisons, letting callers choose failure semantics per call site. Every function accepts a TestingT interface rather than a concrete *testing.T, keeping the library decoupled from the standard library. Getting started requires zero configuration: assert.Equal(t, want, got) works with a single import, and the mock.Mock embed-and-call pattern is idiomatic enough to be treated as a de facto standard by adjacent tools like mockery and testifylint. The main friction point is the size of the API surface (100+ assertion functions) and the deliberate v1 feature-freeze, which keeps the DX stable but leaves some rough edges (e.g. suite not supporting parallel tests) unresolved by design.

Used by 102 apps in this directory

Rust
65%
Apache 2.0

agentgateway

AI Development · Developer Tools · Mcp

5,071

An open source AI-native proxy that secures, observes, and governs agent-to-LLM, agent-to-tool, and agent-to-agent communication through MCP, A2A, and unified LLM routing.

View details
88
Repo Health
82
Technical
69
Dependency
Built with
Rust 65%
Go 23%
Updated 5 days ago
Python
89%
Apache 2.0

Apache Airflow

Data Engineering

46,995

Define, schedule, and monitor complex data workflows as Python code — with a powerful UI, 80+ provider integrations, and battle-tested scalability across thousands of production deployments.

View details
96
Repo Health
89
Technical
64
Dependency
Built with
Python 89%
Updated 4 days ago
Vue
43%
MIT

Alexandrie

Collaboration · Knowledge Management · Note Taking

2,777

The open-source, offline-first Notion, Obsidian & Confluence alternative with multi-tenant teams, OIDC/SSO, and one-command Docker deployment.

View details
86
Repo Health
73
Technical
74
Dependency
Built with
Vue 43%
TypeScript 41%
Go 13%
Updated 1 weeks ago
Go
61%
Apache 2.0

Apache Answer

Community

15,683

Open-source Q&A platform for communities, help centers, and knowledge bases with AI assistant and plugin extensibility

View details
90
Repo Health
78
Technical
68
Dependency
Built with
Go 61%
TypeScript 36%
Updated 1 weeks ago
Go
85%
Apache 2.0

Argo Workflows

Data Engineering · Devops

17,006

The most popular Kubernetes-native workflow engine for orchestrating containerized DAGs, ML pipelines, CI/CD, and parallel batch jobs at scale.

View details
96
Repo Health
90
Technical
68
Dependency
Built with
Go 85%
TypeScript 11%
Updated 4 days ago
Go
83%
Apache 2.0

Authelia

Authentication · Security

29,110

OpenID Certified SSO and MFA portal for securing self-hosted web applications behind reverse proxies.

View details
91
Repo Health
81
Technical
75
Dependency
Built with
Go 83%
TypeScript 15%
Updated 5 days ago
Python
55%
Other

authentik

Authentication · Security

25,758

The self-hosted Identity Provider that replaces Okta, Auth0, and Entra ID with a unified SSO platform supporting SAML, OAuth2/OIDC, LDAP, RADIUS, and WebAuthn.

View details
92
Repo Health
81
Technical
66
Dependency
Built with
Python 55%
TypeScript 36%
Updated 4 days ago
Go
84%
AGPL 3.0

Beta9

AI Development · Automation · Data Engineering

1,794

Run AI workloads at scale with a Pythonic serverless runtime that handles GPU inference, background jobs, and sandboxes with zero infrastructure overhead.

View details
85
Repo Health
78
Technical
66
Dependency
Built with
Go 84%
Python 15%
Updated 5 days ago
Go
92%
AGPL 3.0

BillionMail

Marketing

15,695

Self-hosted email server and marketing platform that gives you unlimited sending, full deliverability control, and AI-assisted campaigns without monthly fees.

View details
52
Repo Health
74
Technical
70
Dependency
Built with
Go 92%
Updated 3 months ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers