目录
gin-left:80px;">
gin-left:80px;">一、添加model
gin-left:80px;">二、完成相关dao
gin-left:80px;">三、使用测试类进行测试
gin-left:120px;">1、把光标防止要测试的方法上,右击并选择
gin-left:120px;">2、自动会生成一个以dao文件加_test命名的文件
gin-left:120px;">3、在其中完善方法并完成测试
gin-left:80px;">四、完成content_create_handle
一、添加model
按数据库字段以及字段格式完成model
type ContentDetails struct {ID int64 `gorm:"column:id;primary_key"`ContentID string `gorm:"column:content_id"`Title string `gorm:"column:title"`Description string `gorm:"column:description"`Author string `gorm:"column:author"`VideoUrl string `gorm:"column:video_url"`Thumbnail string `gorm:"column:thumbnail"`Category string `gorm:"column:category"`Duration int64 `gorm:"column:duration"`Resolution string `gorm:"column:resolution"`FileSize int64 `gorm:"column:fileSize"`Format string `gorm:"column:format"`Quality int64 `gorm:"column:quality"`ApprovalStatus int64 `gorm:"column:approval_status"`Ct time.Time `gorm:"column:created_at"`Ut time.Time `gorm:"column:updated_at"`
}func (ContentDetails) TableName() string {table := "cms_account.content_details"return table
}
二、完成相关dao
type ContentDetailsDao struct {db *gorm.DB
}func NewContentDetailsDao(db *gorm.DB) *ContentDetailsDao {return &ContentDetailsDao{db: db}
}func (c *ContentDetailsDao) Create(content model.ContentDetails) error {if err := c.db.Create(&content).Error; err != nil {fmt.Printf("create contentDetails failed, err:%v\n", err)return err}return nil
}
三、使用测试类进行测试
1、把光标防止要测试的方法上,右击并选择
2、自动会生成一个以dao文件加_test命名的文件
3、在其中完善方法并完成测试
// 添加连接数据库函数
func connDB() *gorm.DB {mysqlDB, err := gorm.Open(mysql.Open("root:rootroot@tcp(localhost:3306)/?charset=utf8mb4&parseTime=True&loc=Local"))if err != nil {panic(err)}db, err := mysqlDB.DB()if err != nil {panic(err)}//最大连接数db.SetMaxOpenConns(4)//最大空闲连接,一般为最大连接数/2db.SetMaxIdleConns(2)mysqlDB = mysqlDB.Debug()return mysqlDB
}func TestContentDetailsDao_Create(t *testing.T) {type fields struct {db *gorm.DB}type args struct {content model.ContentDetails}tests := []struct {name stringfields fieldsargs argswantErr bool}{{ //自定义名称name: "内容插入",//选择db为上面的connDB函数fields: fields{db: connDB(),},args: args{//选择入参content: model.ContentDetails{Title: "test",Ct: time.Now(),Ut: time.Now(),},},wantErr: false,},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {c := &ContentDetailsDao{db: tt.fields.db,}if err := c.Create(tt.args.content); (err != nil) != tt.wantErr {t.Errorf("Create() error = %v, wantErr %v", err, tt.wantErr)}})}
}
四、完成content_create_handle
package servicesimport ("ContentSystem/internal/dao""ContentSystem/internal/model""github.com/gin-gonic/gin""net/http""time"
)// 入参
type ContentCreateReq struct {Title string `json:"title" binding:"required"`Description string `json:"description" binding:"required"`Author string `json:"author" binding:"required"`VideoUrl string `json:"video_url"`Thumbnail string `json:"thumbnail"`Category string `json:"category"`Duration int64 `json:"duration"`Resolution string `json:"resolution"`FileSize int64 `json:"fileSize"`Format string `json:"format"`Quality int64 `json:"quality"`ApprovalStatus int64 `json:"approval_status"`UpdatedAt time.Time `json:"updated_at"`CreatedAt time.Time `json:"created_at"`
}// 回包
type ContentCreateRsp struct {Message string `json:"message"`
}func (c *CmsApp) ContentCreate(ctx *gin.Context) {var req ContentCreateReqif err := ctx.ShouldBindJSON(&req); err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}contentDetailsDao := dao.NewContentDetailsDao(c.db)err := contentDetailsDao.Create(model.ContentDetails{Title: req.Title,Description: req.Description,Author: req.Author,VideoUrl: req.VideoUrl,Thumbnail: req.Thumbnail,Category: req.Category,Duration: req.Duration,Resolution: req.Resolution,FileSize: req.FileSize,Format: req.Format,Quality: req.Quality,ApprovalStatus: req.ApprovalStatus,Ct: time.Now(),Ut: time.Now(),})if err != nil {ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}ctx.JSON(http.StatusOK, gin.H{"code": http.StatusOK,"message": "ok","data": &ContentCreateRsp{Message: "ok",},})
}