How to Mock Database Calls in Go

Mock database calls in Go by defining an interface and implementing a fake struct that returns controlled data during tests.

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
}