【问题标题】:Go Gin Gonic Unit Tests in Sub Folder子文件夹中的 Go Gin Gonic 单元测试
【发布时间】:2021-02-26 16:29:05
【问题描述】:

我有一个使用 Gin 框架构建的 Go API。

阅读测试部分here 中的文档,我尝试实现类似的东西:

main.go

package main

import (
    "mes/routes"

    "github.com/gin-gonic/gin"
)

func setupMainRoutes(engine *gin.Engine) {
    engine.GET("/mesg/:language/services", routes.AllServices)
    engine.GET("/mesg/:language/service/:id", routes.OneService)
    engine.GET("/mesg/:language/services/search", routes.SearchService)
}

func setupErrorRoutes(engine *gin.Engine) {
    engine.NoRoute(routes.Error404Handler)
}

func setupServer() *gin.Engine {
    // Gin Mode
    gin.SetMode(gin.ReleaseMode)

    // Creates the Gin Engine
    engine := gin.New()

    // Setup the API Routes
    setupMainRoutes(engine)

    // Setup Error Routes
    setupErrorRoutes(engine)

    // Return engine
    return engine
}

func main() {
// Run the engine
setupServer().Run()
}

main_test.go

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"

    "github.com/stretchr/testify/assert"
)

/************** Error Handling Tests **************/
func TestPing404Errors1Of3(t *testing.T) {
    router := setupServer()

    w := httptest.NewRecorder()
    req, _ := http.NewRequest("GET", "/", nil)
    router.ServeHTTP(w, req)

    assert.Equal(t, 404, w.Code)
}

但是,我似乎无法将 main_test.go 移动到另一个文件夹,因为 setupServer() 函数变得未定义。

有没有办法将我的所有测试分类到一个子文件夹中?

【问题讨论】:

    标签: unit-testing go go-gin


    【解决方案1】:

    main_test.go 移动到另一个文件夹意味着您将从不同的包测试/调用setupServer()。为此,您需要导出为SetupServer() 并在测试文件中导入包含SetupServer() 的包。不幸的是,您无法使用当前的文件结构执行此操作,因为我们无法导入 package main。因此,如果你真的想这样做,你需要重命名包。

    话虽如此,将测试文件_test.go 放在同一个目录(因此是同一个包)是 Go 中的常见做法。

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2020-05-02
      • 1970-01-01
      • 2017-07-04
      • 2017-08-03
      • 2021-09-06
      • 1970-01-01
      • 2018-11-07
      • 2021-02-28
      相关资源
      最近更新 更多