Тестирование и макет bufio.NewReader (os.Stdin) | ReadRune () - PullRequest
0 голосов
/ 26 февраля 2020

Может кто-нибудь помочь мне написать тесты для этой функции: она используется для выбора таблицы users и на основе ее вывода os.Stdin используется для ввода данных для следующей операции:

func FindUser() (*model.User, error) {
    users := []model.User{}
    user := model.User{}
    db, err := gorm.Open("mysql", "root:password@/d2h?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        log.Panic("Failed to connect database")
    }

    err = db.Find(&users).Error
    if err != nil {
        fmt.Printf("No Users Found In The Database!\n")
        return nil, err
    }
    for _, v := range users {
        fmt.Println("ID:", v.ID, "Name:", v.Name)
    }

    fmt.Printf("\nEnter ID Associated:")
    reader := bufio.NewReader(os.Stdin)
    char, _, err := reader.ReadRune()
    if err != nil {
        fmt.Println(err)
    }
    id, err := strconv.Atoi(string(char))
    fmt.Printf("You choose :%d\n\n", id)

    err = db.Where("id=?", id).First(&user).Error
    if err != nil {
        fmt.Printf("No User Found with Username\n")
        return nil, err
    }
    return &user, nil
}

Структура, которую он возвращает, выглядит так:

type User struct {
    ID        int        `gorm:"id"`
    Name      string     `gorm:"name"`
    Balance   uint       `gorm:"balance"`
    Email     string     `gorm:"email"`
    Phone     string     `gorm:"phone"`
    CreatedAt time.Time  `gorm:"created_at"`
    UpdatedAt time.Time  `gorm:"updated_at"`
    DeletedAt *time.Time `gorm:"deleted_at"`
}

Я думаю, что мне надо издеваться:

reader := bufio.NewReader(os.Stdin)
char, _, err := reader.ReadRune()

Но я не уверен, как это издеваться?

...