Введение
Сегодня хочется немного рассказать о написании тестов в проектах написанных на 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.
Заключение
Тесты это хорошо, а понятные тесты это еще лучше!