Mock database calls in Go by defining an interface for your database operations and implementing a fake struct that satisfies that interface for tests.
// 1. Define interface
type DB interface {
GetUser(id int) (*User, error)
}
// 2. Real implementation
type realDB struct{}
func (d *realDB) GetUser(id int) (*User, error) { /* real SQL */ }
// 3. Mock implementation
type mockDB struct {
GetUserFunc func(int) (*User, error)
}
func (m *mockDB) GetUser(id int) (*User, error) {
return m.GetUserFunc(id)
}
// 4. Usage in test
func TestHandler(t *testing.T) {
db := &mockDB{GetUserFunc: func(id int) (*User, error) {
return &User{Name: "Alice"}, nil
}}
handler := NewHandler(db)
// assert results
}