Назад к вопросам
Junior
26
Как работал с тестированием в Go? Работал ли с моками?
Компании, где спрашивали
Позитив Технолоджис
Ответ от нейросети
sobes.tech AI
В Go для тестирования обычно используется стандартный пакет testing. Тесты пишутся в файлах с суффиксом _test.go и запускаются командой go test.
Для мокирования зависимостей можно использовать интерфейсы и создавать собственные реализации для тестов. Также популярны сторонние библиотеки, например, gomock или testify/mock.
Пример простого теста с мок-объектом:
package service
import (
"testing"
)
type UserRepository interface {
GetUser(id int) (User, error)
}
type User struct {
ID int
Name string
}
type UserService struct {
repo UserRepository
}
func (s *UserService) GetUserName(id int) (string, error) {
user, err := s.repo.GetUser(id)
if err != nil {
return "", err
}
return user.Name, nil
}
// Мок реализации UserRepository
type MockUserRepo struct{}
func (m *MockUserRepo) GetUser(id int) (User, error) {
return User{ID: id, Name: "Test User"}, nil
}
func TestGetUserName(t *testing.T) {
mockRepo := &MockUserRepo{}
service := UserService{repo: mockRepo}
name, err := service.GetUserName(1)
if err != nil {
t.Fatal(err)
}
if name != "Test User" {
t.Errorf("expected 'Test User', got %s", name)
}
}
Такой подход позволяет изолировать тестируемый код от реальных зависимостей.