Home > Article > Backend Development > golang unit test failure expected zero, but got: "null\n"
First of all, I am trying to learn golang. I'm trying to unit test my handlers in golang using testify package. When running my test I get this error -> Expected nil, but got: "null\n" . I'm surprised it shows the method returning a null value. As far as I know, golangte has nil instead of null. what is the reason?
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 }
You are sending back JSON. When you marshal nil, it becomes "null".
In your tests you would do this
assert.Nil(t, rec.Body.String())
and rec.Body
is JSON encoded nil (i.e. "null")
In fact, because rec.Body.String()
returns string
instead of *string
, this test will never pass.
The above is the detailed content of golang unit test failure expected zero, but got: "null\n". For more information, please follow other related articles on the PHP Chinese website!