Go语言 在GIN上下文中以编程方式设置URL参数以用于测试目的

zy1mlcev  于 2023-08-01  发布在  Go
关注(0)|答案(3)|浏览(80)

我正在编写一些测试套件的杜松子酒中间件。我找到了一个解决方案来测试它们,而不必运行完整的路由器引擎,通过创建一个像这样的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(类似于c.SetParam(key, value))中编程设置Url参数?这只是为了测试的目的,所以我不介意非优化的解决方案。

zc0qhyus

zc0qhyus1#

最后通过使用IntelliJ检查结构来解决这个问题,我可以用原始的方式设置它:

c.Params = []gin.Param{
    {
        Key: "id",
        Value: "first document",
    },
}

字符串

kxkpmulp

kxkpmulp2#

由于c.request.url在我的一些测试中为空,我无法获得可接受的答案。
相反,您可以像这样设置查询:

c.Request.URL, _ = url.Parse("?id=mock")

字符串

xpcnnkqh

xpcnnkqh3#

下面是我添加URL/query参数的解决方案

result := httptest.NewRecorder()
context, _ := gin.CreateTestContext(result)
context.Request, _ = http.NewRequest("GET", "?page=2", nil)

字符串

相关问题