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

Go
96%
Other

Netmaker

Automation · Security

11,803

Automate secure WireGuard mesh networks from homelab to enterprise scale without manual configuration.

View details
92
Repo Health
79
Technical
70
Dependency
Built with
Go 96%
Updated 1 weeks ago
Go
68%
MIT

nginx ignition

Developer Tools · Devops

2,139

A modern web UI for nginx that eliminates config file editing with visual virtual hosts, SSL automation, Docker integrations, and real-time traffic analytics.

View details
69
Repo Health
80
Technical
71
Dependency
Built with
Go 68%
TypeScript 29%
Updated 2 weeks ago
Go
98%
Apache 2.0

Nightingale

Monitoring

13,315

Open-source alerting engine that connects to any time-series or log data source and routes alarms to 20+ notification channels with AI-assisted triage.

View details
95
Repo Health
77
Technical
67
Dependency
Built with
Go 98%
Updated 2 weeks ago
Go
93%
MIT

NornicDB

AI Development · AI Memory · Databases

887

A single graph+vector+temporal database for AI workloads — Neo4j-compatible, sub-millisecond hybrid search, and built-in memory decay.

View details
80
Repo Health
82
Technical
71
Dependency
Built with
Go 93%
Updated 1 weeks ago
Go
74%
Other

Notifuse

Marketing

2,223

Open-source, self-hosted alternative to Mailchimp, Brevo, and Klaviyo — send newsletters and transactional emails without per-email pricing or vendor lock-in.

View details
81
Repo Health
80
Technical
66
Dependency
Built with
Go 74%
TypeScript 23%
Updated 3 weeks ago
Go
73%
Apache 2.0

ntfy

Developer Tools · Marketing

34,486

Send push notifications to your phone or desktop from any script or service using a single HTTP PUT or POST—no sign-up required.

View details
89
Repo Health
89
Technical
75
Dependency
Built with
Go 73%
JavaScript 26%
Updated 1 weeks ago
Go
60%
MIT

Obot

AI Agents · Mcp

1,071

An open-source MCP platform for organizations — host MCP servers, run MCP registries, monitor usage, and build agents and chatbots on top of the Model Context Protocol from one self-hosted deployment.

View details
87
Repo Health
70
Technical
70
Dependency
Built with
Go 60%
Svelte 26%
TypeScript 13%
Updated 1 weeks ago
Go
99%
Apache 2.0

Okteto

Developer Tools · Devops

3,549

Develop applications directly inside your Kubernetes cluster with real-time file sync and instant hot-reload — no more docker build/redeploy cycles.

View details
91
Repo Health
79
Technical
68
Dependency
Built with
Go 99%
Updated 1 weeks ago
Go
69%
MIT

Ollama

AI Development · Developer Tools

181,830

Run Llama, Gemma, DeepSeek, and other open LLMs on your own machine with one command and an OpenAI-compatible API.

View details
90
Repo Health
85
Technical
67
Dependency
Built with
Go 69%
C 22%
Updated 1 weeks 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