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/testifyEjemplo 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.0Ejemplo 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/gomegaEjemplo:
package main
import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "testing")
func TestCalculator( También en la biblioteca
Monitoreo de aplicaciones Java: biblioteca Micrometer e integración con Prometheus
Validación de datos en Kotlin: bibliotecas, enfoques y ejemplos de código
TBB (Intel Threading Building Blocks) para C++: guía completa con ejemplos
Geolocalización y mapas en Kotlin: Guía completa de integración
node-cron: Planificador de tareas JavaScript