gin框架学习七之单元测试

在项目目录下新建test 文件夹,然后在该文件下新建test.go 文件来封装一些 请求方法代码如下

type TestCase struct {
   Method       string      //请求类型
   Url          string      //链接
   ContentType string      //
   Param        string      //参数
   Code         int         //状态码
   Desc         string      //描述
   ShowBody     bool        //是否展示返回
   ErrMsg       string      //错误信息
   Ext1         interface{} //自定义1
   Ext2         interface{} //自定义2
}

func init()  {
   //跟main.go 保持一致,用到什么就初始化什么
   //初始日志
   common.InitLogger()
}

func NewBufferString(body string) io.Reader {
   return bytes.NewBufferString(body)
}

//具体的每一个请求
func DoRequest(method, url, contentType string, body string) (c *gin.Context, r *http.Request, w *httptest.ResponseRecorder) {

   route := gin.New()
   route.Use(middleware.GinLogger(),middleware.GinRecovery(false))
   route.Use(middleware.Cors())
   router.InitRouter(route)

   if method =="" {
      method = "POST" //因为我的请求大部分都是post 这个为了偷懒
   }
   w = httptest.NewRecorder()
   c, _ = gin.CreateTestContext(w)
   r = httptest.NewRequest(method, url, NewBufferString(body))
   c.Request = r
   c.Request.Header.Set("Content-Type", contentType)
   c.Request.Header.Set("GINAPPKEY","100000")
   //按照自己需求设置自己的 header
   //...

   route.ServeHTTP(w, r)
   return
}

//执行 测试
func Exec (t *testing.T,caseList []TestCase) {
   for k, v := range caseList {
      _, _, w := DoRequest(v.Method, v.Url, v.ContentType, v.Param)
      fmt.Println()
      fmt.Printf("第%d个测试用例:%s;", k+1, v.Desc)
      if v.ShowBody {
         fmt.Printf("接口返回%s", w.Body.String())
         fmt.Println()
      }
      assert.Equal(t, 200, w.Code)
      //result := Result(w.Body.String())
      //fmt.Println("接口返回:", w.Body.String())
      //assert.Equal(t, "success", result["msg"])
   }
}

然后载对应模块新建 _test.go 来进行测试 ,比如 我对index / product.go 测试 

载test/index/ 新建product_test.go

func TestProduct(t *testing.T)  {

   var caseList  = []test.TestCase{
      {
         Method:      "POST",
         Url:         "/api/index/product/getItems",
         ContentType: "application/json",
         Param:      "",
         Code:        200,
         Desc:        "商品列表接口测试",
         ShowBody:    true,
         ErrMsg:      "",
         Ext1:        nil,
         Ext2:        nil,
      },
      {
         Method:      "POST",
         Url:         "/api/index/product/getItem",
         ContentType: "application/json",
         Param:      `{"id":1}`,
         Code:        200,
         Desc:        "商品详情接口测试",
         ShowBody:    true,
         ErrMsg:      "",
         Ext1:        nil,
         Ext2:        nil,
      },
   }


   test.Exec(t,caseList)

}

然后执行

go test -v ./test/index/product_test.go  可以看到以下信息

 

具体代码 git 地址

GitHub - hailin86/ginApi at unitTest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值