2015-10-20 218 views
2

documentation表示服务器和客户端http请求之间存在差异,例如,在主体为空的情况下。如何创建服务器请求来模拟传入的http请求以进行测试?golang中的HTTP服务器vs客户端请求

编辑:我特别想创建http服务器请求在单元测试期间使用。

+1

只是做的请求:在去或卷曲 – 0x434D53

+1

在这两种情况下,你正在使用同一个对象。这只是如何处理不同的事情。例如,如果您实例化一个请求并且不设置该方法,那么发送该请求,它将默认为“GET”。但是,在服务器上,当他们访问“方法”字段时,它永远不会为空,它将使用请求使用的方法。如果你想对服务器端方法进行一些单元测试,你可以实例化一个请求对象并将其传递给测试对象。 – evanmcdonnal

+1

@evanmcdonnal如果我做了'req:= http.NewRequest(“GET”,“http:// localhost/test”,“”)',我得到一个客户端请求。它对我来说有点不同,因为在单元测试中,当我测试空体时,如果我通过NewRequest生成请求,空体将会给我'nil',但是如果我使用卷曲,空体不是零。 – nullgraph

回答

2

对不起,延迟的答案。昨晚有点跟踪。下面是使用非零体构建请求对象的一个​​简单示例。有一件事需要注意,我不认为我困扰着问,HTTP GET没有一个正文,所以你可能总是得到这个HTTP方法的一个零值。对此没有正面评价,但如果是这样的话,这并不会让我感到惊讶。

package main 

import "fmt" 
import "net/http" 
import "strings" 

func main() { 
     reader := strings.NewReader("") 
     req, _ := http.NewRequest("POST", "http://example.com", reader) 
    fmt.Printf("Body != nil ? %v, value: %s END\n", req.Body != nil, req.Body) 
} 

https://play.golang.org/p/5Fb6b2qgSo

+0

当它是一个服务器GET请求时,我将'&{{} {}}作为正文,而不是零,但我也可以使用您的'NewReader(“”)'的想法。谢谢! – nullgraph

+0

@nullgraph真棒!很高兴我能帮上忙。 – evanmcdonnal

0

我不知道你是否还在寻找一个答案在这里,但实际上去有一个包进行测试HTTP服务器。

https://golang.org/pkg/net/http/httptest/

其用于测试太棒了。您可以通过此处创建请求和服务器以进行测试。

相关问题