Rumah >pembangunan bahagian belakang >Golang >kegagalan ujian unit golang dijangka sifar, tetapi mendapat: 'null\n'

kegagalan ujian unit golang dijangka sifar, tetapi mendapat: 'null\n'

WBOY
WBOYke hadapan
2024-02-06 09:03:08645semak imbas

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

Isi soalan

Pertama sekali saya cuba belajar golang. Saya cuba menguji pengendali saya di golang menggunakan pakej testimoni. Semasa menjalankan ujian saya, saya mendapat ralat ini -> Dijangka tiada, tetapi mendapat: "nulln" . Saya terkejut ia menunjukkan kaedah mengembalikan nilai nol. Setahu saya, golangte mempunyai nil dan bukannya null. sebab apa?

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
}

Jawapan betul


Anda menghantar semula JSON. Apabila anda marshal nil, ia menjadi "null".

Dalam ujian anda, anda akan melakukan ini

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

dan rec.Body ialah nol yang dikodkan JSON (iaitu "null")

Sebenarnya, ujian ini tidak boleh lepas kerana rec.Body.String() 返回的是 string,而不是 *string.

Atas ialah kandungan terperinci kegagalan ujian unit golang dijangka sifar, tetapi mendapat: 'null\n'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam