
首先我正在尝试学习golang。我尝试使用 testify package 在 golang 中对我的处理程序进行单元测试。运行我的测试时,我收到此错误 -> 预期为零,但得到:“null ” 。我很惊讶它显示该方法返回的值为空。据我所知,golangte 有 nil 而不是 null。原因是什么?
my handler test file
package entities
import (
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
type mock struct {
create func(user User) error
getById func(id uuid.UUID) *User
}
var userJson = `{"id":"e918b0bc-76f3-4380-a1fb-a14ca5a08fc3","name":"Jon Snow","email":"[email protected]"}`
func (m *mock) Create(user User) error { return m.create(user) }
func (m *mock) GetById(id uuid.UUID) *User { return m.getById(id) }
func TestCreate(t *testing.T) {
t.Parallel()
//Arrange
e := echo.New()
expectedStatusCode := http.StatusCreated
m := &mock{create: func(user User) error { return nil }}
req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(userJson))
req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
rec := httptest.NewRecorder()
c := e.NewContext(req, rec)
server := NewUserHandler(m)
//Act
server.Create(c)
//Assert
assert.Equal(t, expectedStatusCode, rec.Code)
assert.Nil(t, rec.Body.String())
}
my handler
func (u *userHandler) Create(e echo.Context) error {
var user User
err := json.NewDecoder(e.Request().Body).Decode(&user)
if err != nil {
e.JSON(http.StatusUnprocessableEntity, err)
}
u.userService.Create(user)
if err != nil {
e.JSON(http.StatusBadRequest, err)
}
return e.JSON(http.StatusCreated, nil)
}
my user service
func (u *userService) Create(user User) (err error) {
err = u.userRepo.Create(user)
return
}您正在发回 JSON。当你封送 nil 时,它就变成“null”。
在你的测试中你会这样做
assert.Nil(t, rec.Body.String())
并且 rec.Body 是 JSON 编码的 nil(即“null”)
立即学习“go语言免费学习笔记(深入)”;
事实上,因为 rec.Body.String() 返回的是 string,而不是 *string,所以这个测试永远无法通过。
以上就是golang 单元测试失败预期为零,但得到:“null ”的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号