Maison  >  Article  >  développement back-end  >  échec du test unitaire Golang attendu à zéro, mais obtenu : "null\n"

échec du test unitaire Golang attendu à zéro, mais obtenu : "null\n"

WBOY
WBOYavant
2024-02-06 09:03:08610parcourir

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

Contenu des questions

Tout d'abord, j'essaie d'apprendre le golang. J'essaie de tester unitairement mes gestionnaires dans Golang en utilisant le package testify. Lors de l'exécution de mon test, j'obtiens cette erreur -> Attendu nul, mais j'ai obtenu : "nulln" . Je suis surpris que cela montre la méthode renvoyant une valeur nulle. Autant que je sache, golangte a nul au lieu de nul. quelle est la raison?

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
}

Bonne réponse


Vous renvoyez du JSON. Lorsque vous rassemblez zéro, cela devient "nul".

Dans votre test, vous ferez ceci

assert.Nil(t, rec.Body.String())

et rec.Body est nul encodé en JSON (c'est-à-dire "null")

En fait, ce test ne pourra jamais réussir à cause de rec.Body.String() 返回的是 string,而不是 *string.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer