Heim  >  Artikel  >  Backend-Entwicklung  >  Gehen Sie zum Testen von Spracheinheiten

Gehen Sie zum Testen von Spracheinheiten

WBOY
WBOYnach vorne
2024-02-09 09:30:091173Durchsuche

Go 语言单元测试

php-Editor Yuzai wird Ihnen heute den Unit-Test der Go-Sprache vorstellen. In der Softwareentwicklung ist Unit Testing ein sehr wichtiger Teil. Durch das Schreiben von Testfällen können wir die Korrektheit des Codes überprüfen und die Qualität und Wartbarkeit des Codes verbessern. Die Go-Sprache bietet ein umfangreiches Test-Framework und Tools, die das Schreiben und Ausführen von Unit-Tests einfacher und effizienter machen. Dieser Artikel führt Sie zum Verständnis des Unit-Tests der Go-Sprache, einschließlich der Schreib-, Ausführungs- und Abdeckungsstatistiken von Testfällen. Werfen wir einen genaueren Blick auf Unit-Tests in der Go-Sprache!

Probleminhalt

Beim Ausführen von Komponententests ist ein Fehler bezüglich der Benutzer-ID wegen Verletzung des Primärschlüssels aufgetreten

Meine Funktion zum Umschalten der Favoriten ist wie folgt

func ToggleTrackToFavourite(c *gin.Context) {
    userID := GetCurrentUserID(c)
    trackID, err := strconv.Atoi(c.Param("id"))
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid Track ID"})
        return
    }
    if err := favourites.CreateTable(db.DB); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create table" + err.Error()})
        return
    }
    if isInFavorites(userID, trackID) {
        err = favourites.RemoveFavorite(db.DB, userID, trackID)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to remove track from favorites"})
            return
        }

        c.JSON(http.StatusOK, gin.H{"message": "Track removed from favorites"})
    } else {
        err = favourites.InsertFavorite(db.DB, userID, trackID)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to add track to favorites : " + err.Error()})
            return
        }

        c.JSON(http.StatusOK, gin.H{"message": "Track added to favorites"})
    }
}
func GetCurrentUserID(c *gin.Context) int {
    userID, exists := c.Get("userID")
    if !exists {
        return 0
    }
    if userIDInt, ok := userID.(int); ok {
        return userIDInt
    }
    return 0
}

Die Unit-Test-Funktion des obigen Codes ist wie folgt

func TestToggleTrackToFavourite(t *testing.T) {
    db.InitTestDB()

    if err := users.CreateTable(db.DB); err != nil {
        t.Fatalf("Failed to create users table: %v", err)
    }
    if err := tracks.CreateTable(db.DB); err != nil {
        t.Fatalf("Failed to create tracks table: %v", err)
    }
    if err := favourites.CreateTable(db.DB); err != nil {
        t.Fatalf("Failed to create favorites table: %v", err)
    }
    user := users.User{
        Username: "Test",
        Email:    "[email protected]",
        Password: "123456",
    }
    if err := users.CreateUser(db.DB, &user); err != nil {
        t.Fatalf("Failed to create user: %v", err)
    }

    sampleTrack := tracks.Track{
        Name:         "Test track",
        Index:        10,
        Track:        "chere.mp4",
        Image:        "image.jpg",
        Album_ID:     4,
        Is_Published: true,
    }
    if err := tracks.CreateTrack(db.DB, &sampleTrack); err != nil {
        t.Fatalf("Failed to insert the example track: %v", err)
    }

    r := gin.Default()
    r.PUT("/user/favorite/toggle/:id", ToggleTrackToFavourite)

    reqAddToFavorites := httptest.NewRequest("PUT", "/user/favorite/toggle/1", nil)
    wAddToFavorites := httptest.NewRecorder()

    r.ServeHTTP(wAddToFavorites, reqAddToFavorites)
    assert.Equal(t, http.StatusOK, wAddToFavorites.Code)
    assert.Equal(t, `{"message":"Track added to favorites"}`, wAddToFavorites.Body.String())

    // reqRemoveFromFavorites := httptest.NewRequest("PUT", "/user/favorite/toggle/1", nil)
    // reqAddToFavorites.Params = append(reqAddToFavorites.Params, httptest.Param{"id", "1"})
    // wRemoveFromFavorites := httptest.NewRecorder()
    // r.ServeHTTP(wRemoveFromFavorites, reqRemoveFromFavorites)
    // assert.Equal(t, http.StatusOK, wRemoveFromFavorites.Code)
    // assert.Equal(t, `{"message":"Track removed from favorites"}`, wRemoveFromFavorites.Body.String())

    if _, err := db.DB.Exec("DROP TABLE IF EXISTS favorite"); err != nil {
        t.Fatalf("Failed to drop the table: %v", err)
    }
    if _, err := db.DB.Exec("DROP TABLE IF EXISTS tracks"); err != nil {
        t.Fatalf("Failed to drop the table: %v", err)
    }
    if _, err := db.DB.Exec("DROP TABLE IF EXISTS users"); err != nil {
        t.Fatalf("Failed to drop the table: %v", err)
    }
}

Ich weiß nicht, wie man im Unit-Test den Standardwert der Funktion GETCURRENTUSER als 1 übergibt

Ich möchte nur Titel zu Favoriten hinzufügen/entfernen

Umgehungslösung

Die Benutzer-ID im Code scheint in einer lokalen Variablen namens „userId“ in der lokalen Kontextvariablen einer Authentifizierungs-Middleware vor dem Handler gespeichert zu sein. Richten Sie sie also ein zum Testen ausreicht, können Sie diese Zeilen ändern:

r := gin.Default()
    c.Set("userID", "1")
    r.PUT("/user/favorite/toggle/:id", ToggleTrackToFavourite)

Das obige ist der detaillierte Inhalt vonGehen Sie zum Testen von Spracheinheiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen