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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Go Language의 부동 소수점 번호 작동에 사용되는 라이브러리는 정확도를 보장하는 방법을 소개합니다.

GO의 어떤 라이브러리가 대기업이나 잘 알려진 오픈 소스 프로젝트에서 개발 했습니까? GO에 프로그래밍 할 때 개발자는 종종 몇 가지 일반적인 요구를 만납니다.

Go Crawler Colly의 대기열 스레딩 문제는 Colly Crawler 라이브러리를 GO 언어로 사용하는 문제를 탐구합니다. � ...

Go Language의 문자열 인쇄의 차이 : println 및 String () 함수 사용 효과의 차이가 진행 중입니다 ...

GO 언어에서 구조를 정의하는 두 가지 방법 : VAR과 유형 키워드의 차이. 구조를 정의 할 때 Go Language는 종종 두 가지 다른 글쓰기 방법을 본다 : 첫째 ...

Go Pointer Syntax 및 Viper Library 사용의 문제 해결 GO 언어로 프로그래밍 할 때 특히 포인터의 구문 및 사용법을 이해하는 것이 중요합니다.

GO의지도 반복이 왜 모든 값이 마지막 요소가되게합니까? Go Language에서 인터뷰 질문에 직면했을 때, 당신은 종종지도를 만납니다 ...

Go Language Slice Index : 오류없이 단일 요소 슬라이스가 인덱스 1에서 차단하는 이유는 무엇입니까? Go Language에서 슬라이스는 바닥을 참조 할 수있는 유연한 데이터 구조입니다 ...
