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
Lepaskan: 2024-02-06 09:03:08
ke hadapan
644 orang telah melayarinya

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
}
Salin selepas log masuk


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())
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan