我知道Golang有一个允许运行单元测试的testing package。这对于内部调用Golang函数进行单元测试似乎效果很好,但似乎有些人也在尝试将其应用于API testing。
考虑到像Node.js的Mocha和Chai断言库这样的自动化测试框架的巨大灵活性,对于什么样的测试,使用Golang的测试包与其他测试包有意义吗?
谢谢。
发布于 2017-02-08 08:22:14
我同意@eduncan911的评论。更具体地说,您可以通过确保处理程序接受
http.ResponseWriter作为适当请求之外的参数。此时,您将被设置为声明一个新请求:
req, err := http.NewRequest("GET", "http://example.com", nil)以及一个新的httptest记录器:
recorder := httptest.NewRecorder()然后向您的处理程序发出新的测试请求:
yourHandler(recorder, req)这样您最终可以检查记录器中的错误/等:
if recorder.Code != 200 {
//do something
}发布于 2018-06-28 18:22:00
为了发出一个虚拟请求,你必须首先初始化路由器,然后设置服务器,然后再发出请求。要遵循的步骤:
1. router := mux.NewRouter() //initialise the router
2. testServer := httptest.NewServer(router) //setup the testing server
3. request,error := http.NewRequest("METHOD","URL",Body)
4. // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
resp := httptest.NewRecorder()
5. handler := http.HandlerFunc(functionname)
// Our handlers satisfy http.Handler, so we can call their ServeHTTP method
// directly and pass in our Request and ResponseRecorder.
handler.ServeHTTP(resp, req)发布于 2019-04-16 22:50:26
我经常使用smartystreets goconvey和assertions包。虽然stdlib提供了几乎所有你需要的东西,但我认为它缺少的一件事是“生活质量”功能。
goconvey包将为您提供一个很好的web浏览器界面,支持热重新加载。每次更新时,它都会重新运行。您还可以有选择地选择运行的内容。因此,我通常会打开另一个运行它的控制台,它会弹出一个浏览器选项卡,就像我编写代码一样。它还使得查看代码覆盖率变得简单和方便。
组织和嵌套测试用例也变得很容易,然后在您的web浏览器中呈现得很好。
当然,断言包只为您提供了一些快捷方式。
我发现这节省了大量的样板文件和时间。否则,我将为每个项目编写所有相同的内容。
它还可以使您的测试更加一致。如果您有一个断言和工具库,那么在构建自定义模式之前,您将首先找到一个断言和工具库,然后在另一个测试中偏离该模式。以混乱、难以阅读的测试结束并不难。
还有其他一些包可以帮助测试API和HTTP请求。所以就像其他人说的,你可以从头开始做,或者你可以使用一个包来处理样板文件。它可以让你的测试变得更短更干净。
那么,“什么样的测试呢?”所有这些都是我的经验。我总是从其他包中受益。尽管要记住的重要一点是,所有这些都是建立在Golang中已经很棒的测试之上的。我喜欢Golang胜过其他语言的一个原因是因为它已经包含了几乎所有的东西。我并不是在做一些缺失的事情,我只是为了我的工作流程和偏好而增强它。然后,下一个来为我的包运行测试的人实际上可以自由地使用他们想要的CLI。不需要在他们的浏览器中运行goconvey。因此,优先选择部分保持优先。这在其他地方并不常见。
https://stackoverflow.com/questions/42091720
复制相似问题