TDD заметки: Тестирование в проектах на Golang

Введение

Сегодня хочется немного рассказать о написании тестов в проектах написанных на Golang.

В плане тестирования в Go подход очень простой а точнее примитивный. Дело в том, что Go за тем как писать и организовывать тесты разработчик должен следить сам, т.е. вся ответственность на разработчике приложения 🙂

Это в свою очередь приводит к тому, что привычного инструментария для тестирования не так много, но зато он уже есть в коробке.

А вот что есть в этой самой коробке и как это можно приукрасить я и хочу рассказать.

Первый простой тест

Задача: Написать функцию, которая прибавляет к целому числу два и возвращает его в качестве результата.

В первую очередь мы пишем тест. Файл с  тестом назовем numberator_test.go, это первое что нужно знать, все тесты в go должны быть в файлах с постфиксом _test.go.

Вот простейший пример теста:

package numberator

import "testing"

func TestNumberIncrement(t *testing.T) {
    // если результат выполнения
    // функции не равен сумме 5+2
    // то добавляем ошибку
    if NumberIncrement(5) != 5+2 {
        t.Error("Error! NumberIncrement(5) != 5+2")
    }
}

Думаю суть теста понятна и не требует дополнительных объяснений.

Как же теперь нам запустить наш тест, делается это очень просто командой go test:

go test ./

Улучшаем наш тест

Наш тест выполняется и успешно падает, вроде бы все хорошо, но хотелось бы сделать наш тест не только работающим и выполняющим свою функцию но и более приятным для нас разработчиков.

Для этого есть очень хороший пакет – https://github.com/stretchr/testify, который нам с этим и поможет.

Поставить его очень просто: go get github.com/stretchr/testify

Перепишем наш тест с помощью этого пакета:

package numberator

import (
    "github.com/stretchr/testify/assert"
    "testing"
)

func TestNumberIncrement(t *testing.T) {
    // задаем здесь наше правило
    // результат NumberIncrement(5) должен быть равен  5+2
    assert.Equal(t, NumberIncrement(5), 5+2, "NumberIncrement(5) != 5+2")
}

Теперь наш тест стал понятнее и сам говорит о своих ожиданиях, не так ли?

В этом же пакете есть много дополнительных методов для улучшения наших с вами тестов. Со всеми возможностями этого пакета можно ознакомиться на https://godoc.org/github.com/stretchr/testify.

Заключение

Тесты это хорошо, а понятные тесты это еще лучше!