千巷猫影
你需要使用这个:https ://github.com/DATA-DOG/go-sqlmock它非常易于使用。这是一个使用模拟 SQL 测试控制器的示例:执行func (up UserProvider) GetUsers() ([]models.User, error) { var users = make([]models.User, 0, 10) rows, err := up.DatabaseProvider.Query("SELECT firstname, lastname, email, age FROM Users;") if err != nil { return nil, err } for rows.Next() { var u models.User = models.User{} err := rows.Scan(&u.Name, &u.Lastname, &u.Email, &u.Age) if err != nil { return nil, err } users = append(users, u) } if err := rows.Err(); err != nil { return nil, err } return users, nil}测试func TestGetUsersOk(t *testing.T) { db, mock := NewMock() mock.ExpectQuery("SELECT firstname, lastname, email, age FROM Users;"). WillReturnRows(sqlmock.NewRows([]string{"firstname", "lastname", "email", "age"}). AddRow("pepe", "guerra", "pepe@gmail.com", 34)) subject := UserProvider{ DatabaseProvider: repositories.NewMockDBProvider(db, nil), } resp, err := subject.GetUsers() assert.Nil(t, err) assert.NotNil(t, resp) assert.Equal(t, 1, len(resp))}func NewMock() (*sql.DB, sqlmock.Sqlmock) { db, mock, err := sqlmock.New() if err != nil { log.Fatalf("an error '%s' was not expected when opening a stub database connection", err) } return db, mock}