Writing Tests with gt
When writing Go test code, use the gt library for type-safe assertions.
Step 1: Locate gt documentation
First, find where gt is installed and read its documentation:
GT_DIR=$(go list -m -f '{{.Dir}}' github.com/m-mizutani/gt 2>/dev/null)
If gt is available, read the relevant documentation from $GT_DIR/docs/:
docs/README.md- Overview and quick referencedocs/types/*.md- Detailed documentation for each test typedocs/patterns/*.md- Common patterns (method chaining, Required, Describe)
Step 2: Choose the right test type
| Data Type | Use | NOT |
|---|---|---|
[]T (slice) |
gt.Array(t, arr).Length(3) |
gt.Value(t, len(arr)).Equal(3) |
string |
gt.String(t, s).Contains("x") |
gt.Bool(t, strings.Contains(s, "x")).True() |
error |
gt.NoError(t, err) |
gt.Value(t, err).Nil() |
int, float, etc. |
gt.Number(t, n).Greater(5) |
gt.Bool(t, n > 5).True() |
map[K]V |
gt.Map(t, m).HasKey("k") |
manual check with gt.Bool |
bool |
gt.Bool(t, b).True() |
gt.Value(t, b).Equal(true) |
Step 3: Apply common patterns
Use Required() for fail-fast
gt.NoError(t, err).Required() // Stop immediately if error
gt.Value(t, result).NotNil().Required() // Stop if nil
Use Describef() for context
gt.Array(t, users).
Describef("Users for tenant %s", tenantID).
Length(5)
Handle function returns with R1/R2/R3
result := gt.R1(parseJSON(input)).NoError(t)
gt.String(t, result.Name).Equal("Alice")
Quick Reference
Constructors: gt.Value, gt.Array, gt.Map, gt.Number, gt.String, gt.Bool, gt.Error, gt.NoError, gt.File, gt.Cast, gt.R1/R2/R3
Short aliases: gt.V, gt.A, gt.M, gt.N, gt.S, gt.B, gt.F, gt.C
Source: m-mizutani/gollem — distributed by TomeVault.