四十一、完成内容添加功能(使用go测试方法)

embedded/2024/9/24 4:04:18/

目录

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",},})
}


http://www.ppmy.cn/embedded/115894.html

相关文章

力扣 LCR 020 回文子串 -Python

题目链接:LCR 020. 回文子串 - 力扣(LeetCode) 题目描述: 给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视…

网页通知设计灵感:CSS 和 JS 的 8 大创意实现

文章目录 前言正文1.霓虹灯风格的通知系统2.垂直时间轴通知3.动画徽章通知4.项目式通知5.多种状态通知:成功、错误、警告6.信息、警告、提示组件7.扁平化风格通知8.社交媒体风格弹出通知 总结 前言 网页通知如今已成为电商、社交平台等网站的常见功能,它…

苹果为什么不做折叠屏手机?

苹果为什么不做折叠屏手机?折叠屏手机在最近这些年里边,可以说是市场的一个主要在手机上的增长点。你像华W最近推出这个三折叠手机,引起了整个市场的轰动。 可是,为什么苹果到今天为止不为所动,还在那不停地在现在的这…

JIT(Just-In-Time Compilation)编译器及其原理实现

什么是JIT编译器? JIT编译器是一种特殊的编译器,它在程序运行期间动态地将字节码(Bytecode)转换为机器码。这种转换发生在程序执行时,而不是在程序启动之前。JIT编译器的主要目的是提高程序的执行速度和效率&#xff…

lora 微调3B模型微调前有5G 量化f16 后最后导出模型容量变小了只有2G了,为什么?

环境: lora 微调 问题描述: lora 微调3B模型微调前有5G 量化f16 后最后导出模型容量变小了只有2G了,为什么? 解决方案: 在使用LoRA(Low-Rank Adaptation)对大语言模型(例如一个…

ELK企业级日志分析系统

目录 一、ELK简介 1.1 ELK概述 二、Elasticsearch简介 2.1 核心功能 2.2 架构与组件 2.3 使用场景 2.4 Elasticsearch特点与缺点 三、Logstash简介 3.1 主要特点 1、数据收集: 2、数据处理: 3、数据输出: 4、可扩展性: 5、…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景: 平常做rom相关开发时候经常需要与settings值打交道,需要独立或者存储一个settings的场景,群里有个学员朋友就问了一个疑问,那就是Settings的putString方式来存储字符,那么可以存储的最大字符是多少呢&#xff1…

用最通俗易懂的语言和例子讲解三维点云

前言: 我整体的学习顺序是看的按B站那“唯一”的三维点云的视频学习的(翻了好久几乎没有第二个...)对于深度学习部分,由于本人并没有进行学习,所以没有深究。大多数内容都进行了自己的理解并找了很多网络的资源方便理解…