最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • golang 单元测试失败预期为零,但得到:“nulln”

    golang 单元测试失败预期为零,但得到:“null\n”

    问题内容

    首先我正在尝试学习golang。我尝试使用 testify package 在 golang 中对我的处理程序进行单元测试。运行我的测试时,我收到此错误 -> 预期为零,但得到:“nulln” 。我很惊讶它显示该方法返回的值为空。据我所知,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”)

    事实上,因为 rec.Body.String() 返回的是 string,而不是 *string,所以这个测试永远无法通过。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » golang 单元测试失败预期为零,但得到:“nulln”
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情