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 }
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!