123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package test
- import (
- "baize-demo/project/mono/application"
- "bytes"
- "encoding/json"
- "git.sxidc.com/go-tools/utils/strutils"
- "github.com/stretchr/testify/assert"
- "io"
- "net/http"
- "net/http/httptest"
- "reflect"
- "testing"
- "time"
- )
- type ToolKit struct {
- t *testing.T
- body io.Reader
- header map[string]string
- queryParams map[string]string
- jsonResponse interface{}
- token string
- responseRecorder *httptest.ResponseRecorder
- }
- func Init() {
- application.NewApp()
- go func() {
- err := application.Start()
- if err != nil {
- panic(err)
- }
- }()
- time.Sleep(100 * time.Millisecond)
- }
- func Destroy() {
- err := application.Finish()
- if err != nil {
- panic(err)
- }
- application.DestroyApp()
- }
- func NewToolKit(t *testing.T) *ToolKit {
- return &ToolKit{
- t: t,
- header: make(map[string]string),
- queryParams: make(map[string]string),
- }
- }
- func (toolKit *ToolKit) SetHeader(key string, value string) *ToolKit {
- toolKit.header[key] = value
- return toolKit
- }
- func (toolKit *ToolKit) SetBody(body *bytes.Buffer) *ToolKit {
- toolKit.body = body
- return toolKit
- }
- func (toolKit *ToolKit) SetQueryParams(key string, value string) *ToolKit {
- toolKit.queryParams[key] = value
- return toolKit
- }
- func (toolKit *ToolKit) SetJsonBody(body interface{}) *ToolKit {
- jsonBody, err := json.Marshal(body)
- if err != nil {
- toolKit.t.Fatal("转换JSON失败")
- }
- toolKit.body = bytes.NewBuffer(jsonBody)
- return toolKit
- }
- func (toolKit *ToolKit) SetJsonResponse(response interface{}) *ToolKit {
- if response == nil {
- toolKit.jsonResponse = nil
- return toolKit
- }
- responseValue := reflect.ValueOf(response)
- if responseValue.Kind() != reflect.Ptr {
- toolKit.t.Fatal("JsonResponse应该传递指针类型")
- }
- toolKit.jsonResponse = response
- return toolKit
- }
- func (toolKit *ToolKit) SetToken(token string) *ToolKit {
- toolKit.token = token
- return toolKit
- }
- func (toolKit *ToolKit) Request(url string, method string) *ToolKit {
- if len(toolKit.queryParams) != 0 {
- url = url + "?"
- for key, value := range toolKit.queryParams {
- url = url + key + "=" + value + "&"
- }
- url = url[:len(url)-1]
- toolKit.queryParams = make(map[string]string)
- }
- request, err := http.NewRequest(method, url, toolKit.body)
- if err != nil {
- toolKit.t.Fatal("创建请求失败", err)
- }
- if len(toolKit.header) != 0 {
- for key, value := range toolKit.header {
- request.Header.Add(key, value)
- }
- toolKit.header = make(map[string]string)
- }
- if !strutils.IsStringEmpty(toolKit.token) {
- request.Header.Add("Authorization", toolKit.token)
- }
- toolKit.responseRecorder = httptest.NewRecorder()
- application.ServerHttpForTest(toolKit.responseRecorder, request)
- if toolKit.responseRecorder.Code == http.StatusOK && toolKit.jsonResponse != nil {
- responseBody, err := io.ReadAll(toolKit.responseRecorder.Body)
- if err != nil {
- toolKit.t.Fatal("读取响应Body失败")
- }
- err = json.Unmarshal(responseBody, toolKit.jsonResponse)
- if err != nil {
- toolKit.t.Fatal("转换Response失败")
- }
- }
- return toolKit
- }
- func (toolKit *ToolKit) AssertStatusCode(code int) *ToolKit {
- assert.Equal(toolKit.t, code, toolKit.responseRecorder.Code)
- return toolKit
- }
- func (toolKit *ToolKit) AssertBodyEqual(body string) *ToolKit {
- assert.Equal(toolKit.t, body, toolKit.responseRecorder.Body.String())
- return toolKit
- }
- func (toolKit *ToolKit) AssertEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) *ToolKit {
- assert.Equal(toolKit.t, expected, actual, msgAndArgs)
- return toolKit
- }
- func (toolKit *ToolKit) AssertNotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) *ToolKit {
- assert.NotEqual(toolKit.t, expected, actual, msgAndArgs)
- return toolKit
- }
- func (toolKit *ToolKit) AssertNotEmpty(object interface{}, msgAndArgs ...interface{}) *ToolKit {
- assert.NotEmpty(toolKit.t, object, msgAndArgs)
- return toolKit
- }
- func (toolKit *ToolKit) AssertGreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) *ToolKit {
- assert.GreaterOrEqual(toolKit.t, e1, e2, msgAndArgs)
- return toolKit
- }
- func (toolKit *ToolKit) AssertZero(e1 interface{}, msgAndArgs ...interface{}) *ToolKit {
- assert.Zero(toolKit.t, e1, msgAndArgs)
- return toolKit
- }
|