go - HTTP 集成测试

标签 go integration-testing

我有一个用 Go 编写的小型服务。我已经用 httptest 等测试了它,但是,我正在模拟数据库等等......

我想做什么:

  • 使用空数据库启动我在生产中使用的同一台服务器
  • 使用 HTTP 对其运行测试
  • 获取这些测试的覆盖范围

空数据库部分不是问题,因为我通过环境变量使所有内容都可配置。

向它发出请求也不是问题,因为它只是标准的 Go 代码...

问题是:我不知道如何以一种我可以衡量它(及其子包)覆盖率的方式启动服务器。此外,主服务器代码在 main 函数中......我什至不知道我是否可以从其他地方调用它(我尝试了标准方法,但没有反射和类似的东西).

我是 Go 的新手,所以,我可能在胡说八道。

最佳答案

您可以在测试中启动 http 服务器,并对其发出请求。

为了更方便,您可以使用httptest.Server在测试中,给它你的主要 http.Handler。 httptest.Server 有一些方法可以更好地控制服务器的启动和停止,并提供了一个 URL 字段来为您提供服务器的本地地址。

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, client")
}))
defer ts.Close()

res, err := http.Get(ts.URL)
if err != nil {
    log.Fatal(err)
}
greeting, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s", greeting)

关于go - HTTP 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685872/

相关文章:

java - 集成测试外部库?

java - 我如何让我的 Spring-JUnit 测试认为它在 GenericApplicationContext 中运行?

arrays - 解码 map 和 array json

amazon-web-services - 如何在Golang中将AWS Xray跟踪添加到SMTP调用中

mysql - 如何将 Go time.Time 转换为 MySQL datetime?

c# - 集成测试 : Am I doing it right?

sql-server - 如何为不同的数据库多次运行 NUnit onetimesetup

dictionary - 在 Go 中如何从 map 中获取一个值?

go - 修复所有给出 "go: error loading module requirements"的 Go 命令?

java - 我可以在 Maven 构建中使用 PostgreSQL 吗?