出于测试目的,以编程方式在 gin 上下文中设置 url 参数
Programmatically set an url parameter in gin context for testing purpose
我正在为 gin 中间件编写一些测试套件。我找到了一个解决方案来测试它们,而不必 运行 一个完整的路由器引擎,通过创建一个像这样的 gin 上下文:
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
目标是通过调用来测试我的功能:
MyMiddleware(c)
// Then I use c.MustGet() to check if every expected parameter has been transmitted to gin
// context, with correct values.
我的一个中间件依赖于 c.Param()
。是否可以在调用中间件之前以编程方式在 gin 中设置一个 Url 参数(类似于 c.SetParam(key, value)
)?这仅用于测试目的,所以我不介意未优化的解决方案。
终于通过使用 IntelliJ 检查结构弄明白了,我可以直接设置它:
c.Params = []gin.Param{
{
Key: "id",
Value: "first document",
},
}
由于 c.Request.URL 在我的一些测试中为零,我无法得到可接受的答案。
相反,您可以这样设置查询:
c.Request.URL, _ = url.Parse("?id=mock")
我正在为 gin 中间件编写一些测试套件。我找到了一个解决方案来测试它们,而不必 运行 一个完整的路由器引擎,通过创建一个像这样的 gin 上下文:
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
目标是通过调用来测试我的功能:
MyMiddleware(c)
// Then I use c.MustGet() to check if every expected parameter has been transmitted to gin
// context, with correct values.
我的一个中间件依赖于 c.Param()
。是否可以在调用中间件之前以编程方式在 gin 中设置一个 Url 参数(类似于 c.SetParam(key, value)
)?这仅用于测试目的,所以我不介意未优化的解决方案。
终于通过使用 IntelliJ 检查结构弄明白了,我可以直接设置它:
c.Params = []gin.Param{
{
Key: "id",
Value: "first document",
},
}
由于 c.Request.URL 在我的一些测试中为零,我无法得到可接受的答案。
相反,您可以这样设置查询:
c.Request.URL, _ = url.Parse("?id=mock")