From charlesreid1

Basics

How testing works in Go

For each file X.go a corresponding test named X_test.go should contain unit tests for that code.

To run tests, just use the built-in test command in go: go test

Example

Example function to test

Take this simple function as an example:

package main

import (
	"fmt"
)

// Return the square of a number
func square(x int) (result int) {
	return x * x
}

func main() {
	fmt.Println("Hello World")
}

Simple test

We can write a corresponding test:

// main_test.go
package main

import (
	"testing"
)

func test_square(t *testing.T) {
	if test_square(2) != 4 {
		t.Error("Error testing square(): did not return correct result")
	}
}

Test matrix

We can implement a matrix of tests using a for loop:

// main_test.go
package main

import (
	"testing"
)

func test_squares(t *testing.T) {
	var tests = []struct {
		input    int
		expected int
	}{
		{2, 4},
		{-1, 1},
		{0, 0},
		{-5, 25},
		{1000, 1000000},
	}

	for _, test := range tests {
		output := Calculate(test.input)
                if output != test.expected {
			t.Error("Test Failed: {} inputted, {} expected, received: {}", test.input, test.expected, output)
		}
	}
}

Resources

Introduction to testing in Go: https://tutorialedge.net/golang/intro-testing-in-go/

Advanced Go testing tutorial: https://tutorialedge.net/golang/advanced-go-testing-tutorial/


Flags