Skip to content

Testing Strategies

Build confidence in your CLI with comprehensive testing at every level.

Test at the Right Level

Unit tests catch logic bugs with fakes. Integration tests catch API contract issues. E2E tests catch workflow bugs in real clusters.


Overview

A well-tested CLI uses different testing strategies at different levels. This section covers:


Testing Pyramid

graph TB
    E2E[E2E Tests<br/>Full workflow in real cluster]
    Integration[Integration Tests<br/>Real API server with kind/envtest]
    Unit[Unit Tests<br/>Fake clients and mock interfaces]

    E2E --> Integration --> Unit

    %% Ghostty Hardcore Theme
    style E2E fill:#9e6ffe,color:#1b1d1e
    style Integration fill:#65d9ef,color:#1b1d1e
    style Unit fill:#a7e22e,color:#1b1d1e

Test Organization

myctl/
├── cmd/
│   ├── check.go
│   └── check_test.go        # Command tests
├── pkg/
│   ├── k8s/
│   │   ├── client.go
│   │   ├── client_test.go   # Unit tests with fakes
│   │   └── fake_client.go   # Test doubles
│   └── selector/
│       ├── selector.go
│       └── selector_test.go
└── test/
    ├── e2e/                  # E2E tests
    └── fixtures/             # Test resources

Makefile Targets

.PHONY: test test-unit test-integration test-e2e

test: test-unit

test-unit:
    go test -v -race ./...

test-integration:
    go test -v -tags=integration ./pkg/...

test-e2e:
    ./test/e2e/run.sh

Best Practices

Practice Description
Interface first Design for testability with interfaces
Table-driven tests Cover edge cases systematically
Parallel tests Use t.Parallel() where safe
Build tags Separate integration tests with //go:build integration
Clean up Always clean up test resources

Test at the right level. Unit tests catch logic bugs. Integration tests catch API issues. E2E tests catch workflow bugs.

Comments