Go 語言單元測試
Feb 09, 2024 am 09:30 AM
go語言
php小編魚仔今天為大家介紹Go語言的單元測試。在軟體開發中,單元測試是非常重要的一環。透過編寫測試案例,我們可以驗證程式碼的正確性,提高程式碼品質和可維護性。 Go語言提供了豐富的測試框架和工具,使得編寫和執行單元測試變得更加簡單和有效率。本文將帶領大家了解Go語言的單元測試,包括測試案例的編寫、運行和覆蓋率的統計。讓我們一起來深入了解Go語言的單元測試吧!
問題內容
執行單元測試時出現主鍵違規 user_id 錯誤
我的togglefavourite功能如下
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 }
登入後複製
上述程式碼的單元測試函數如下
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) } }
登入後複製
不知道如何在單元測試中將 GETCURRENTUSER 函數的預設值傳遞為 1
只想從收藏夾中新增/刪除曲目
解決方法
程式碼中的使用者ID 似乎儲存在處理程序之前的某些驗證中間件的上下文局部變數中在名為“userId”的局部變數中,因此設定它足以進行測試,您可以更改這些行:
r := gin.Default() c.Set("userID", "1") r.PUT("/user/favorite/toggle/:id", ToggleTrackToFavourite)
登入後複製
以上是Go 語言單元測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)