Pruebas en Go (Golang): frameworks y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pruebas en Go (Golang): frameworks y herramientas



Go (Golang) fue diseñado desde el principio teniendo en cuenta las necesidades del desarrollo moderno, por lo que la biblioteca estándar ya incluye un potente paquete testing. Sin embargo, para proyectos complejos a menudo se requieren herramientas adicionales: mocks, aserciones (assertions), estilo BDD y verificación de fugas de gorutinas. En este artículo analizaremos los principales frameworks y bibliotecas para pruebas en Go, mostraremos ejemplos de código y explicaremos cuándo usar cada uno.



1. Paquete integrado testing



El paquete estándar testing es la base de todo. Las pruebas se escriben en archivos con el sufijo _test.go, y las funciones deben tener la firma func TestXxx(t *testing.T). Ejemplo:



package main

import ( "testing")

func Sum(a, b int) int { return a + b}

func TestSum(t *testing.T) { result := Sum(2, 3) expected := 5 if result != expected { t.Errorf("Sum(2,3) = %d; want %d", result, expected) }}


Ejecución de pruebas: go test ./.... Para benchmarks se usa testing.B, para ejemplos — ExampleXxx.



2. Biblioteca testify



Testify es la biblioteca de terceros más popular para pruebas en Go. Proporciona aserciones convenientes, mocks y funciones auxiliares.



Instalación:

go get github.com/stretchr/testify


Ejemplo con aserciones:

package main

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

func TestSumWithTestify(t *testing.T) { result := Sum(2, 3) assert.Equal(t, 5, result, "Sum should be 5") assert.NotEqual(t, 0, result) assert.True(t, result > 0)}


Testify también incluye el paquete mock para crear mocks. Ejemplo:

package main

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

// DataService — interfaz que vamos a mockeartype DataService interface { GetData(id int) string}

// MockDataService — estructura mocktype MockDataService struct { mock.Mock}

func (m *MockDataService) GetData(id int) string { args := m.Called(id) return args.String(0)}

func TestGetData(t *testing.T) { mockService := new(MockDataService) mockService.On("GetData", 1).Return("result1")

result := mockService.GetData(1) assert.Equal(t, "result1", result) mockService.AssertExpectations(t)}


3. gomock — generación de mocks



Gomock de Google es un framework para generar mocks basados en interfaces. Funciona a través de la utilidad mockgen.



Instalación:

go install github.com/golang/mock/mockgen@v1.6.0


Ejemplo de uso:

//go:generate mockgen -source=service.go -destination=mock_service.go -package=main

type Service interface { Process(data string) error}

// En la prueba:func TestProcess(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish()

mockService := NewMockService(ctrl) mockService.EXPECT().Process("test").Return(nil)

err := mockService.Process("test") assert.NoError(t, err)}


Gomock es bueno para proyectos grandes donde hay muchas interfaces — la generación de código ahorra tiempo.



4. ginkgo — estilo BDD



Ginkgo es un framework para Behaviour-Driven Development (BDD). Permite escribir pruebas en estilo "Describe", "Context" e "It".



Instalación:

go get github.com/onsi/ginkgo/v2go get github.com/onsi/gomega


Ejemplo:

package main

import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "testing")

func TestCalculator(

Recommendations