单元测试理论及实践

无论你处于什么位置,做任何事,都要有责任心。你写的是代码,也是信任!

要对自己负责!从需求分析、系统设计到功能开发;说的每句话,画的每张图,写的每行代码,都关系着你的面子,关系着你在别人心中的份量。在开发中如何高效高质量交付呢?

单元测试就是把控代码质量的金钥匙之一。

单元测试是整个测试体系中最底层的自动化测试,也是代价最小把控服务质量的方法。

从一个功能开始

在工作中,我发现大多数人没有写单元测试的习惯,或者没有正确的思维框架。因此,本文从模仿掘金的草稿功能说起,来谈谈单元测试之理论与实践参考。

简化的功能:

  1. 创建空草稿
  2. 更新草稿
  3. 查询草稿
  4. 更新状态
package service

import (
	"time"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// Draft 草稿
type Draft struct {
	gorm.Model
	Title   string
	Content string
	Post    rune
}

var db *gorm.DB

func init() {
	var err error
	// 仅为了方便演示使用sqlite
	db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	db.AutoMigrate(&Draft{})
}

//CreateEmptyDraft 创建空草稿
func CreateEmptyDraft(id uint) error {
	dra := new(Draft)
	dra.ID = id
	dra.Post = 'N'
	//保存 draft
	result := db.Create(dra)
	if result.Error != nil {
		return result.Error
	}
	return nil
}

//UpdateDraft 更新草稿
func UpdateDraft(dra *Draft) error {
	dra.UpdatedAt = time.Now()
	// 更新 draft
	err := db.Save(dra).Error
	return err
}

// GetDraft 查询草稿
func GetDraft(id uint) (*Draft, error) {
	var dra Draft
	// 查询 draft
	err := db.First(&dra, id).Error
	if err != nil {
		return nil, err
	}
	return &dra, nil
}

// PostDraft 发表草稿状态
func PostDraft(id uint) error {
	var dra Draft
	err := db.First(&dra, id).Error
	if err != nil {
		return err
	}
	dra.Post = 'Y'
	err = db.Save(dra).Error
	return err
}
复制代码

上面,我们在服务层定义了四个方法,分别模拟4个接口服务层实现。再来看下一个草稿的状态图:

CreateEmptyDraft

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享