以编程方式在 gin 上下文中设置 url 参数以进行测试

Kaw*_*aLo 2 testing go go-gin

我正在为 gin 中间件编写一些测试套件。我找到了一个解决方案来测试它们,而无需运行完整的路由器引擎,通过创建一个像这样的 gin 上下文:

w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
Run Code Online (Sandbox Code Playgroud)

目标是通过调用来测试我的功能:

MyMiddleware(c)

// Then I use c.MustGet() to check if every expected parameter has been transmitted to gin
// context, with correct values.
Run Code Online (Sandbox Code Playgroud)

我的一个中间件依赖于c.Param(). 是否可以c.SetParam(key, value)在调用中间件之前以编程方式在 gin(类似)中设置 Url 参数?这仅用于测试目的,所以我不介意非优化的解决方案。

Kaw*_*aLo 5

最后通过使用 IntelliJ 检查结构弄清楚了,我可以将它设置为原始方式:

c.Params = []gin.Param{
    {
        Key: "id",
        Value: "first document",
    },
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 5

由于 c.Request.URL 在我的一些测试中为零,因此我无法获得可接受的答案。

相反,您可以像这样设置查询:

c.Request.URL, _ = url.Parse("?id=mock")
Run Code Online (Sandbox Code Playgroud)