4

这是我使用测试包和 echo web http 框架进行的测试:(webserver 变量是一个全局 echo 实例)

func TestRunFunction(t *testing.T){
    req := new(http.Request)
    **req.Header.Set("Authorization","Bearer "+loginToken.Token)**
    rec := httptest.NewRecorder()
    c := WebServer.NewContext(standard.NewRequest(req, WebServer.Logger()), standard.NewResponse(rec, WebServer.Logger()))
    c.SetPath(path)
    if assert.NoError(t , RunFunction(c)){
        assert.Equal(t,http.StatusOK, rec.Code)
    }
}

我试图测试一些由 REST GET 方法调用的函数,但我得到了这个恐慌错误:

panic: assignment to entry in nil map [recovered]
        panic: assignment to entry in nil map

当我尝试设置标题时,恐慌以粗体显示(代码中的 astrix)。我究竟做错了什么?

4

1 回答 1

10

错误是不言自明的:req.Header是零;您不能分配给零地图。

解决方案是:

  1. req.Header用一个新的实例初始化net/http.Header

    req.Header = make(http.Header)
    
  2. 或者,使用 来创建req变量net/http.NewRequest,它会为您完成所有内部初始化:

    req, err := http.NewRequest("GET", "https://example.com/path", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("Authorization","Bearer "+loginToken.Token)
    
于 2017-01-01T14:39:31.177 回答