我正在使用appengine和golang开发简单的RESTful API。当我使用goapp启动服务时,代码工作得很好,我开始编写单元测试函数来测试API端点,我在这里受到了惊慌错误appengine: NewContext passed an unknown http.Request的打击。当我运行goapp test时,我会得到这个错误。
因为某种原因,我无法传递我创建的请求并将其传递给appengine.NewContext()
下面是代码的片段。
body := strings.NewReader("")
request, err := http.NewRequest("GET", "endpoint url", body) //inst.NewRequest("GET", goalUrl, body) //
if err != nil {
t.Error(err)
}
t.Log(request)
c := appengine.NewContext(request) // ERROR: appengine: NewContext passed an unknown http.Request我创建了一个简单可复制代码。你能帮我做这个吗?或者有人在appengine上有他们的golang项目,并且有单元测试功能来测试端点,我想看看他们的代码.
这是我发布的gitlab问题,它包含了问题的所有必要细节,以及示例和详细的错误消息。谢谢你的帮助。
发布于 2016-11-09 23:48:48
对延迟答复表示歉意。我自己也在研究解决方案
下面是解决go应用程序单元测试问题的方法:完整的解决方案代码可以在这个github回购分支机构上找到。
在*_test.go文件中,我使用了以下内容。
对于每个API处理程序代码,我没有直接使用appengine.NewContext创建新的上下文,而是在下面的sudocode中描述了代码
using the gorilla's context.GetOk(..), check
IF the received request object has the key "Context"
THEN using value of that key as the context
ELSE derive context using appengine.NewContext(r)我已经将可重用的功能封装到一个名为风测试的单独库中,并在代码中使用了它。
有了这个设置,我就可以运行goapp测试来启动单元测试。有关解决方案的完整详细信息,请参阅解码。
下面是帮我找到这个解决方案的博客。非常感谢马克。用MUX和高阶函数在GOOGLE应用引擎中测试GO HTTP处理程序。
发布于 2016-10-29 07:42:46
NewContext从航班HTTP请求中派生出上下文,即已在其中注册的上下文。
由于您正在创建一个内部应用程序包所不知道的新请求,所以它非常恐慌。
这个包还提供了一个RegisterTestRequest函数,但是在主要文档中没有提到它,所以YMMV。我没有这方面的经验。
https://stackoverflow.com/questions/40316822
复制相似问题