# Test With Gt

> Write Go test code using the gt library. Use when writing tests, creating test files, or when the user asks to add tests for Go code. Use when this capability is needed.

- Skill: `tomevault-io/test-with-gt` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/test-with-gt`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/test-with-gt/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/test-with-gt

---


# 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:

```bash
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 reference
- `docs/types/*.md` - Detailed documentation for each test type
- `docs/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

```go
gt.NoError(t, err).Required()  // Stop immediately if error
gt.Value(t, result).NotNil().Required()  // Stop if nil
```

### Use `Describef()` for context

```go
gt.Array(t, users).
    Describef("Users for tenant %s", tenantID).
    Length(5)
```

### Handle function returns with R1/R2/R3

```go
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](https://github.com/m-mizutani/gollem) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-07-02 -->

