问题标签 [go-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
704 浏览

go - 提供 -coverpkg 参数时 go test 失败

我正在尝试在我的项目中的所有包中获得测试覆盖率。

当我执行以下命令时,测试正在成功执行并报告覆盖率。

go test但是当我使用coverpkg=./...参数执行时所有测试都失败了

这是命令的示例输出

我正在使用 go 版本 1.15.6

有没有办法找到构建失败的原因?

0 投票
1 回答
775 浏览

go - golang 测试在 test.v 的标志解析上失败

在我的 go 程序中,主要方法是:

我有一个看起来像的虚拟测试:

当我(从 goland 或命令行)运行测试时,出现以下错误:

当我删除主要标志的行时,测试正常执行关于如何解决这个问题的任何想法,好吗?

提前致谢

0 投票
0 回答
232 浏览

unit-testing - 使用 bufconn 对 gRPC 进行单元测试时模拟“peer”

我在我的 golang 服务器中实现了单向(客户端和服务器)流式 gRPC 方法。我遇到了bufconn这使我能够在我的测试中通过内存连接创建我的服务器。但是,我的方法中有逻辑检查对等方的地址,它总是返回“bufconn”。我确实依靠对等方提供 IP 地址及其端口,但我无法使用 bufconn 真正实现这一点。

  1. 在 golang 中测试 gRPC 流式调用的规范(或首选)方法是什么?
  2. 在上下文中依赖对等信息是否被认为是一种反模式?
0 投票
1 回答
43 浏览

api - go中的单元测试

我想测试 API 函数,但参数给出了问题。

0 投票
1 回答
1508 浏览

go - 如何为 godotenv.Load() .env 文件使用动态位置?

问题

我正在用 Go 构建一个 REST API。godotenv用于加载环境变量。运行go run main.go,项目按预期运行API,加载环境变量。

但是,当想要使用以下方式运行测试时:go test ./...- 其中运行config/config_test.go- 它会引发以下错误:(Error loading .env file如函数中指定的那样)。

给定以下项目结构:

config.go中,我使用以下函数来加载数据库配置。

我知道它在从 root 运行时可以工作,因为它.env位于 root 中。运行时config/config_test.go,它会尝试.env/config/.env. 如果我将 line: 更改err := godotenv.Load(".env")err := godotenv.Load("../.env"),则 config_test.go 运行成功,但go run main.gofrom root 运行不成功。

问题

如何.envGetConfig()函数中动态加载位置config.go,以便go test ./...go run main.go都可以加载.env

编辑

我知道将path string参数传递给GetConfig()函数将在我的应用程序中工作(我正在应用程序包中初始化此配置)。但是,我想在不同的目录中创建多个测试,并且不希望传递参数。还有另一种方法可以做到这一点吗?

0 投票
1 回答
408 浏览

go - 如何在golang中为基准测试初始化​​测试数据?

当我为我的算法编写基准测试时,我被一个问题弄糊涂了!

我的测试代码详细信息已推送到 github,我将其复制到此处并添加了一些注释。

https://github.com/hidstarshine/Algorithm/blob/master/leet/problem24_test.go

在问题行中,我调用 FTDBenchmarkSwapPairs1(FTD 表示填充测试数据)来初始化数据。

然后发生了一些令人惊奇的事情,BenchmarkSwapPairs1 似乎在许多 goroutine 中运行。

因此并发带来了数据竞争,并且由于 SwapPairs1 特殊的逻辑,调试变得一团糟。

SwapPairs1 将更改 ListNode 中的 Next。

然后我想将 BenchmarkSwapPairs1 移动到 for 块来解决这个问题。

但是数据竞赛似乎仍未解决,并且由于初始化时间的原因,基准测试没有任何意义。

我在 leetcode 上判断算法并被接受!

问:我怎样才能优雅地解决这个问题?需要一个好主意!


新的@Jimb

我添加只是添加一些调试信息然后它恐慌。我也认为它一开始不会有数据竞赛。

当我看到恐慌时,我做出了假设!


恐慌信息(重要)

0 投票
1 回答
281 浏览

go - 如何在 XML 中生成测试报告

我在 Go 中有测试(单元和集成),我需要用 XML(最好是 Junit)生成报告。此外,每个测试都会测试特定的功能。因此,我希望它们在报告中被分组/标记。

我在互联网上唯一能找到的是Go Junit Report。此工具将测试运行输出转换为 junit XML。我需要一种方法来标记 Go 测试中的功能并将其包含在报告中。

如何在 Go 中添加标签并将其输出?

0 投票
1 回答
292 浏览

go - 如何模拟内联函数

我正在尝试使用 GoMonkey 模拟一个函数,但我发现它失败了,因为编译器会在程序编译时内联这个函数,所以 GoMonkey 无法模拟它。

那么如何模拟这个函数或者如何模拟其他成员的私有函数呢?

测试代码如下:

模拟函数

0 投票
1 回答
322 浏览

go - 如何使用 Go 的 httptest 模拟多个不同的 HTTP 响应?

我创建了一些 Go 函数,它们对 Internet 上的服务进行 HTTP GET 调用并解析结果。

我现在正在为这些函数编写测试用例。在我的测试用例中,我使用 go 包httptest来模拟对这些外部服务的调用。下面是我的代码。为简洁起见,特意删除了错误检查。这里是go-playground

这是它产生的输出:

如您所见,我创建了一些虚拟 HTTP 响应数据{"A":"B"},当您向 发送 HTTP 请求时srv.URL,它实际上会命中一个短暂的 HTTP 服务器,该服务器使用虚拟数据进行响应。凉爽的!

当您向 发送第二个 HTTP 请求时srv.URL,它会再次使用相同的虚拟数据进行响应。但这就是我的问题出现的地方。{"C":"D"}我希望临时 HTTP 服务器在第二次和第三次{"E":"F"}收到请求时返回一些不同的数据。

如何更改main()函数的第一行,以便服务器在随后的 HTTP 调用中响应我想要的数据?

0 投票
2 回答
30 浏览

go - 如何测试服务器的Oauth2.0资源

我想编写测试代码以验证正确的文档以到达第三方服务器的 Oauth2.0,我应该如何完成伪代码?