Fehler beim Golang-Einheitentest erwartet Null, aber erhalten: „null\n'

WBOY
Freigeben: 2024-02-06 09:03:08
nach vorne
610 Leute haben es durchsucht

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

Frageninhalt

Zunächst versuche ich Golang zu lernen. Ich versuche, meine Handler in Golang mithilfe des Testify-Pakets einem Unit-Test zu unterziehen. Wenn ich meinen Test durchführe, erhalte ich diese Fehlermeldung -> Ich bin überrascht, dass die Methode einen Nullwert zurückgibt. Soweit ich weiß, hat Golangte Null statt Null. was ist der Grund?

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
}
Nach dem Login kopieren

Richtige Antwort

Sie senden JSON zurück. Wenn Sie Null marshallieren, wird es zu „Null“.

In deinem Test wirst du das tun

assert.Nil(t, rec.Body.String())
Nach dem Login kopieren

und

ist JSON-codiert Null (d. h. „null“)

rec.BodyTatsächlich kann dieser Test wegen

niemals bestanden werden.

Das obige ist der detaillierte Inhalt vonFehler beim Golang-Einheitentest erwartet Null, aber erhalten: „null\n'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!