Maison > développement back-end > Golang > é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
Libérer: 2024-02-06 09:03:08
avant
643 Les gens l'ont consulté

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
}
Copier après la connexion


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())
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal