Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
李宇怀
Backend
Commits
75c47933
Commit
75c47933
authored
Sep 03, 2023
by
李宇怀
Browse files
更新了一版模板
parent
2e8eb26f
Changes
1
Hide whitespace changes
Inline
Side-by-side
test.go
View file @
75c47933
package
main
import
(
"fmt"
"io"
"errors"
"go-svc-tpl/api/dto"
"go-svc-tpl/internal/controller"
"go-svc-tpl/internal/dao/model"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
)
func
TestMyController
(
t
*
testing
.
T
)
{
// 创建一个新的HTTP服务器,用于处理请求
mux
:=
http
.
NewServeMux
()
mux
.
HandleFunc
(
"/"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
fmt
.
Fprintf
(
w
,
"Hello, World!"
)
})
server
:=
&
http
.
Server
{
Addr
:
":8080"
,
Handler
:
mux
}
// 启动HTTP服务器
go
func
()
{
if
err
:=
server
.
ListenAndServe
();
err
!=
nil
&&
err
!=
http
.
ErrServerClosed
{
t
.
Errorf
(
"Error starting server: %v"
,
err
)
}
}()
// 等待服务器启动
time
.
Sleep
(
1
*
time
.
Second
)
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
"gorm.io/gorm"
)
// 创建一个HTTP客户端
client
:=
&
http
.
Client
{
Timeout
:
5
*
time
.
Second
,
func
TestUserController_Register
(
t
*
testing
.
T
)
{
testCases
:=
[]
struct
{
desc
string
req
*
dto
.
UserRegisterReq
expected
error
}{
{
desc
:
"success"
,
req
:
&
dto
.
UserRegisterReq
{
Email
:
"test@test.com"
,
Password
:
"password"
,
Name
:
"test"
,
},
expected
:
nil
,
},
{
desc
:
"invalid email"
,
req
:
&
dto
.
UserRegisterReq
{
Email
:
"test@test"
,
Password
:
"password"
,
Name
:
"test"
,
},
expected
:
errors
.
New
(
"wrong email pattern"
),
},
}
// 发送一个GET请求到服务器
r
es
p
,
err
:=
client
.
Get
(
"http://localhost:8080"
)
if
err
!=
nil
{
t
.
Errorf
(
"Error sending request: %v"
,
err
)
return
}
defer
resp
.
Body
.
Close
(
)
for
_
,
tC
:=
range
testCases
{
t
.
Run
(
tC
.
d
es
c
,
func
(
t
*
testing
.
T
)
{
gin
.
SetMode
(
gin
.
TestMode
)
r
:=
gin
.
New
(
)
r
.
Use
(
func
(
c
*
gin
.
Context
)
{
c
.
Set
(
controller
.
USER_ID_KEY
,
uint
(
1
))
}
)
// 发送一个POST请求到服务器
resp
,
err
=
client
.
Post
(
"http://localhost:8080"
,
"application/json"
,
nil
)
if
err
!=
nil
{
t
.
Errorf
(
"Error sending request: %v"
,
err
)
return
}
defer
resp
.
Body
.
Close
()
ctrl
:=
&
controller
.
UserController
{
db
:
&
gorm
.
DB
{},
}
_
=
model
.
Migrate
(
ctrl
.
db
)
ctrl
.
db
=
model
.
MockDB
()
// 检查响应是否成功
if
resp
.
StatusCode
!=
http
.
StatusOK
{
t
.
Errorf
(
"Unexpected status code
: %
d
"
,
resp
.
StatusCode
)
return
}
var
resp
*
httptest
.
ResponseRecorder
if
data
,
err
:=
tC
.
req
.
ToJSON
();
err
!=
nil
{
t
.
Fatalf
(
"failed to marshal request to JSON
: %
v
"
,
err
)
}
else
{
req
,
_
:=
http
.
NewRequest
(
http
.
MethodPost
,
"/register"
,
strings
.
NewReader
(
data
))
// 读取响应内容
body
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
t
.
Errorf
(
"Error reading response body: %v"
,
err
)
return
}
resp
=
httptest
.
NewRecorder
()
r
.
POST
(
"/register"
,
func
(
c
*
gin
.
Context
)
{
if
err
:=
ctrl
.
Register
(
c
,
tC
.
req
);
err
!=
nil
{
c
.
AbortWithStatus
(
http
.
StatusInternalServerError
)
}
c
.
AbortWithStatus
(
http
.
StatusOK
)
})
r
.
ServeHTTP
(
resp
,
req
)
}
// 检查响应内容是否正确
expected
:=
"Hello, World!"
if
string
(
body
)
!=
expected
{
t
.
Errorf
(
"Unexpected response body: %s"
,
string
(
body
))
return
assert
.
Equal
(
t
,
http
.
StatusOK
,
resp
.
Code
)
assert
.
Equal
(
t
,
tC
.
expected
,
nil
)
})
}
// 关闭HTTP服务器
server
.
Close
()
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment