首页 > 解决方案 > 测试和模拟 bufio.NewReader(os.Stdin) | 读取符文()

问题描述

谁能帮我为这个函数编写测试:它用于选择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()

但我不确定如何模拟这些?

标签: mysqlunit-testinggogo-gorm

解决方案


推荐阅读