Skip to main content
Testereiro - Test Engine Toolkit for Go
Go Docs GitHub Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Getting Started

Requirements

  • Go 1.24+
  • A test framework using testing (go test)

Install Core

1
go get github.com/wrapped-owls/testereiro/puppetest

Minimal Engine Setup

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package mytests

import (
	"log/slog"
	"os"
	"testing"

	"github.com/wrapped-owls/testereiro/puppetest"
)

var NewEngine func(t testing.TB) *puppetest.Engine

func TestMain(m *testing.M) {
	factory, err := puppetest.NewEngineFactory()
	if err != nil {
		slog.Error("failed to create engine factory", slog.String("error", err.Error()))
		os.Exit(1)
	}

	NewEngine = factory.NewEngine
	code := m.Run()

	if err = factory.Close(); err != nil {
		slog.Error("failed to close engine factory", slog.String("error", err.Error()))
		os.Exit(1)
	}

	os.Exit(code)
}

First Test

1
2
3
4
5
6
func TestSmoke(t *testing.T) {
	engine := NewEngine(t)
	if engine.BaseURL() != "" {
		t.Fatal("expected no server in this setup")
	}
}

Add an HTTP Server Extension

1
2
3
4
5
6
7
8
factory, err := puppetest.NewEngineFactory(
	puppetest.WithExtensions(
		puppetest.WithTestServer(myHandler()),
	),
)
if err != nil {
	panic(err)
}

Then use engine.BaseURL() from your tests.

Add a Database Connection

1
2
3
4
5
6
7
factory, err := puppetest.NewEngineFactory(
	puppetest.WithConnectionFactory(mySQLPerformer),
	puppetest.WithDatabaseLifecycle(puppetest.MySQLLifecycle),
)
if err != nil {
	panic(err)
}

mySQLPerformer must match puppetest.ConnectionPerformer.

WithConnectionFactory on its own opens the database your performer points at and reuses it. Adding WithDatabaseLifecycle gives each test its own database, created before the test and dropped after it. See Database Lifecycle for the shipped engines and for writing your own.

Next Steps