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

news/2024/9/20 5:41:37 标签: gin, golang, 开发语言, 后端, 数据库

目录

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)
	//最大空闲连接,一般为最大连接数/2
	db.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    string
		fields  fields
		args    args
		wantErr 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 services

import (
	"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 ContentCreateReq
	if 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.niftyadmin.cn/n/5666616.html

相关文章

安科瑞智能塑壳断路器适用于物联网配电电网中-安科瑞黄安南

智能塑壳断路器是一款多功能、体积小、智能化的塑壳断路器,适用于物联网配电电网中。用于三相四线中性点直接接地的供电、用电系统,能全面采集功率、电能量、功率因数、谐波等用电参数;具有过载、短路、缺相、过压、欠压、剩余电流动作保护等功能&#x…

vue + leaflet + 天地图实现搜索省份后高亮

实现省份高亮方法最重要的代码在于 L.geoJSON(district).addTo(map)这个方法,district为参数,可以在页面中引入当前省份的坐标json。 获取省份json文件的地址:https://datav.aliyun.com/portal/school/atlas/area_selector import beijing …

SpinalHDL之结构(三)

本文作为SpinalHDL学习笔记第六十三篇,介绍SpinalHDL的函数(Function)。 目录: 1.简介(Introduction) 2.RGA到灰度(RGB to grey) 3.Valid和Ready负载总线(Valid Ready Payload bus) ⼀、简介(Introduction) ⽤Scala函数产⽣硬件的⽅式与VHDL/Verilog…

【面经】static关键字总结

1.什么是static关键字 static中文意思是静态的,是C/C中常见的一个关键字。它一般用于修饰变量(局部变量/全局变量)和函数。 对于变量来说,static关键字用来控制变量的存储方式,作用范围和生命周期。 下面我们分别在…

详解Vite创建Vue3项目router-less-scss-pinia-持久化

前言 Vite 和 Webpack 都是现代化的前端构建工具,它们可以帮助开发者优化前端项目的构建和性能。虽然它们的目标是相似的,但它们在设计和实现方面有许多不同之处。webpack可以看我的上一篇文章 一、准备工作安装工具 这里我们简单介绍一下文章中使用到…

2024最新!!!iOS高级面试题,全!(二)

iOS应用是如何启动以及如何优化 pre-main阶段 加载动态链接器dyld到App进程 加载动态库(包括所依赖的所有动态库) Rebase 修正内部的指针指向 Bind 修正外部指针指向 初始化Objective C Runtime 包括oc的类、分类的注册,selector唯一性检查等…

茴香豆:企业级知识问答工具实践闯关任务

基础任务 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手,并使用 Gradio 界面完成 2 轮问答(问题不可与教程重复,作业截图需包括 gradio 界面问题和茴香豆回答)。知识库可根据根据自己工作、学习或感兴趣的内容调…

langchain报错记录(js)

文章目录 [ERR_PACKAGE_PATH_NOT_EXPORTED]报错:报错语句:思路:解决方法: [ERR_PACKAGE_PATH_NOT_EXPORTED] 报错: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath ‘./dist/prompts/’ is not defined by…