测试用例

2021-04-02  本文已影响0人  Best博客

mock

你的server需要的依赖,在声明server就得注入进去,而且该依赖必须得用interface的方式声明

面向接口编程能够不断解耦,同时也能缩小测试范围,编写测试用例

你需要下载2个工具包

go get github.com/golang/mock/mockgen//mockgen负责生成我们定义的interface的mock文件
go get github.com/golang/mock/gomock //使用mockgen生成的文件的时候需要用到的胶水包
go get github.com/bmizerany/assert //断言,方面我们定制自己期望的结果

image.png

执行命令

mockgen.exe -source=source.go -destination=db_mock.go -package=source
source.go 你interface生成的路径位置,db_mock.go生成的mock文件的位置(注意文件夹提前生成好),source生成的包名

demo

import (
    "context"
    "fmt"
    "github.com/bmizerany/assert"
    "github.com/golang/mock/gomock"
    "sync"
    "testing"
    "time"
)
func Test_coreImpl_CreateConsumer(t *testing.T) {
    mockCtl := gomock.NewController(t)
    //review 指的就是你上一步生成的mock文件的包名了,mock工具生成的文件,都提供NewMockXxx的方法,方便我们获取mock对象
    mockReview := review.NewMockReview(mockCtl)
    mockSource := source.NewMockSource(mockCtl)
    mockRepository := store.NewMockRepository(mockCtl)

    //我们能通过这里的EXPECT 去定义我们mock的方法传参数类型,以及返回值
    //gomock.Any() 参数可以是任何类型
    // .AnyTimes() 方法可以被调用多少次,无数次
    //Return(a, nil)  返回值
    mockRepository.EXPECT().GetPermanent().Return([]db.ContentReviewPermanent{
        db.ContentReviewPermanent{Id: 1, TextId: 0, ImageId: 2, SourceTableName: (&db.ContentReviewBbsCnhubeiUser{}).TableName()},
        db.ContentReviewPermanent{Id: 2, TextId: 2, ImageId: 1, SourceTableName: (&db.ContentReviewBbsCnhubeiArticle{}).TableName()},
    }, nil).AnyTimes()

    mockReview.EXPECT().SensitiveWords(gomock.Any()).Return(false, nil).AnyTimes()
    mockRepository.EXPECT().CreateAuditV2(gomock.Any()).Return(nil).AnyTimes()

    t.Run("CreateConsumer", func(t *testing.T) {
        c := NewCoreImpl(mockReview, mockSource, mockRepository)
        c.imageWorkNum = 3
        c.textWorkNum = 30
        c.updPermanentData()

        assert.Equal(t, len(c.permanentData), 2)
        assert.Equal(t, c.permanentData[0].imageId, int32(2))
        assert.Equal(t, c.permanentData[1].textId, int32(2))


        t.Log(t, "consumer success")
    })
}


参考文献:
https://geektutu.com/post/quick-gomock.html

上一篇 下一篇

猜你喜欢

热点阅读