Go Table Tests

Write idiomatic table-driven Go tests that stay offline and follow this repo's conventions.

stacklok 7e7d7bd 1.1 KB Updated

File contents

Go table-driven tests

When adding tests in this codebase:

  1. Stay offline. Use mockllm + memfs (or a t.TempDir() for file-backed adapters). Never hit a live model or the network in a test.

  2. Prefer table-driven cases for any behaviour with multiple inputs:

    func TestThing(t *testing.T) {
        cases := []struct {
            name string
            in   string
            want string
        }{
            {name: "empty", in: "", want: ""},
            {name: "basic", in: "x", want: "X"},
        }
        for _, tc := range cases {
            t.Run(tc.name, func(t *testing.T) {
                if got := Thing(tc.in); got != tc.want {
                    t.Errorf("Thing(%q) = %q, want %q", tc.in, got, tc.want)
                }
            })
        }
    }
    
  3. Assert error results, not panics. Tool-level failures come back as an error ToolResult (res.IsError), not a Go error — check the result.

  4. Run the suite with task test (which uses -race).

stacklok/mecatl/tree/main/docs/examples/skills/go-table-tests commit 7e7d7bde6f

Frequently asked questions

npx skillmds@latest add stacklok/go-table-tests