Go-Go-轻松搞定单测从httptest到testify的高级实战
文章导语
单元测试是Go代码的"身份证"。Go内置的testing包加上httptest、testify能构建完整的测试体系。本文深入HTTP测试、数据库Mock、异步测试等高级场景。
一、HTTP测试
funcTestGetUser(t*testing.T){router:=setupRouter()req:=httptest.NewRequest("GET","/users/1",nil)w:=httptest.NewRecorder()router.ServeHTTP(w,req)assert.Equal(t,200,w.Code)varresp APIResponse json.Unmarshal(w.Body.Bytes(),&resp)assert.Equal(t,0,resp.Code)}二、数据库Mock
import"github.com/DATA-DOG/go-sqlmock"funcTestUserRepo(t*testing.T){db,mock,_:=sqlmock.New()deferdb.Close()rows:=sqlmock.NewRows([]string{"id","name"}).AddRow(1,"test")mock.ExpectQuery("SELECT").WillReturnRows(rows)repo:=NewUserRepo(db)user,err:=repo.FindByID(1)assert.NoError(t,err)assert.Equal(t,"test",user.Name)}三、全文总结
httptest测试HTTP Handler,sqlmock Mock数据库,testify提供断言和Mock,子测试(Subtest)组织测试用例。
参考文献
- Go testing包文档
- testify: https://github.com/stretchr/testify
- sqlmock: https://github.com/DATA-DOG/go-sqlmock