问题标签 [testify]

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 回答
14676 浏览

testing - 如何测试 Golang 通道/go-routines

我有一个包含一个字节数据的类型,并采用一个通道在那里发布新数据。其他代码可以使用Read函数读取最后写入的数据字节。

编辑:对于实际的、可运行的代码,请参阅https://github.com/ariejan/i6502/pull/3尤其是文件 acia6551.go 和 acia6551_test.go。测试结果可以在这里查看:https ://travis-ci.org/ariejan/i6502/jobs/32862705

我有以下内容:

我的测试如下所示:

起初,我认为“读取值”发生在 go-routing 开始写入数据之前。但是“已发布”消息总是在“阅读”之前打印。

所以,还有两个问题:

  • 这是处理传入字节流的最佳方法吗(9600 波特;-))
  • 如果这是正确的方法,我该如何正确测试它或我的代码有什么问题?
0 投票
5 回答
65780 浏览

unit-testing - 在 Go 中分离单元测试和集成测试

是否有在 GoLang(作证)中分离单元测试和集成测试的既定最佳实践?我混合了单元测试(不依赖任何外部资源,因此运行速度非常快)和集成测试(确实依赖任何外部资源,因此运行速度较慢)。所以,当我说go test.

最直接的技术似乎是在 main 中定义一个 -integrate 标志:

然后在每个集成测试的顶部添加一个 if 语句:

这是我能做的最好的吗?我搜索了 testify 文档,看看是否有命名约定或为我完成此任务的东西,但没有找到任何东西。我错过了什么吗?

0 投票
2 回答
2716 浏览

unit-testing - Testify 似乎正在同时运行测试套件?

基本上,我在一个特定的包中创建了一个新的测试文件,其中包含一些基本的测试结构 - 没有实际的测试......只是一个嵌入 suite.Suite 的空结构类型,以及一个接收 *testing.T 对象并调用套件的函数.Run() 在所述结构上。这立即导致我们所有其他测试开始不确定地失败。

故障的性质与在单个 Postgres 数据库中插入和删除时的数据库唯一密钥完整性违规有关。这让我相信测试是同时运行的,而没有调用我们的设置方法来在测试之间正确准备环境。

不用说,当我将这个测试文件移动到另一个包时,一切都神奇地起作用了!

以前有没有其他人遇到过这个问题并且可以提供一些见解?

在此处输入图像描述

0 投票
1 回答
2200 浏览

go - Go:使用数据库初始化从多个包运行测试

我有一个具有这种项目结构的 GO 项目(每个包中有多个此类文件)。

在 user.go 中,我有 User 结构和创建/获取/更新用户的函数(我使用的是 GORM,但这不是问题)。在 user_test.go 中。

我想为每个不同的文件清理数据库(删除所有数据或处于某种状态),所以我尝试为每个文件创建 1 个套件(使用 Testify),然后使用 SetupSuite 函数但是行为似乎不是确定性的,可能我做错了什么。

所以我的问题是:

  • 共享数据库连接的最佳方式是什么?使用全局变量是最好的选择吗?
  • 在运行每个 file_test.go 之前,在数据库中创建表然后使用自定义数据初始化数据库的最佳方法是什么?

现在我也有一个奇怪的错误:运行

一切正常,但如果我运行(用于测试所有包)

我有似乎不是确定性的错误,这就是为什么我猜测数据库连接没有正确处理

0 投票
5 回答
19893 浏览

unit-testing - 对使用 gorilla/mux URL 参数的函数进行单元测试

TLDR:gorilla/mux 过去不提供设置 URL Vars 的可能性。现在确实如此,这就是为什么在很长一段时间内,第二高的答案是正确的答案。

要遵循的原始问题:


这是我正在尝试做的事情:

main.go

这将创建一个基本的 http 服务器侦听端口,该端口8080回显路径中给出的 URL 参数。因此,http://localhost:8080/test/abcd它将写回包含abcd在响应正文中的响应。

GetRequest()函数的单元测试在main_test.go中:

测试结果是:

问题是我如何伪造mux.Vars(r)单元测试?我在这里找到了一些讨论,但建议的解决方案不再有效。建议的解决方案是:

此解决方案不起作用,context.DefaultContext并且mux.ContextKey不再存在。

另一个建议的解决方案是更改您的代码,以便请求函数也接受 amap[string]string作为第三个参数。其他解决方案包括实际启动服务器并构建请求并将其直接发送到服务器。在我看来,这会破坏单元测试的目的,将它们本质上变成功能测试。

考虑到链接线程来自 2013 年的事实。还有其他选择吗?

编辑

所以我已经阅读了gorilla/mux源代码,并且根据这里定义mux.go的函数是这样的:mux.Vars()

的值varsKey定义为iota here。所以本质上,关键值是0. 我写了一个小测试应用程序来检查这个: main.go

运行时,输出:

这让我想知道为什么测试不起作用以及为什么直接调用mux.Vars不起作用。

0 投票
4 回答
4178 浏览

unit-testing - golang包中的模拟方法

我一直无法找到从 golang 包中模拟方法的解决方案。

例如,我的项目有代码在 Os.Getwd() 返回错误时尝试恢复。我能想到为此进行单元测试的最简单方法是模拟 Os.Getwd() 方法以返回错误,并验证代码是否相应地工作。

我尝试使用 testify,但似乎不可能。

有人有这方面的经验吗?

0 投票
1 回答
255 浏览

testing - xml / 字符串测试失败的自定义证明输出

我正在使用 testify 测试 XML 编组,并使用strings.Contains它来检查我希望包含在 XML 中的行是否确实存在。

但是,我想区分实际与所需的 xml。

目前,我的代码看起来像:

xml 文件中的行数比测试中的单行多,因此您可以想象 if 语句将是粗略的。关于清理这个更具可扩展性的任何想法?

0 投票
1 回答
1227 浏览

unit-testing - 如何断言模拟方法调用与作证按顺序发生?

文档AssertExpectations说“AssertExpectations 断言使用 On 和 Return 指定的所有内容实际上都按预期调用。调用可能以任何顺序发生。” 如果我想断言某些调用按顺序发生怎么办?

gomock 有*Call.After(*Call)这个,但我在作证中看不到任何类似的东西。有没有办法,或者我应该只使用 gomock?

0 投票
1 回答
93 浏览

testing - 如何用 Go 测试这个简单的方法?

我正在编写一些单元测试,并且一直在为以下方法编写测试:

我想要一个测试,其中helpers.RandomString(int)返回一个字符串,该字符串已经是我的数据库中的一个键,但我发现没有办法helpers.RandomString(int)在我的测试中重新声明或猴子补丁。

我尝试使用 testify mock,但似乎不可能。

难道我做错了什么?

谢谢。

0 投票
2 回答
9179 浏览

go - 我可以在套件中运行单个测试吗?

我已经为我的结构设置了一个测试套件(https://github.com/stretchr/testify#suite-package)。在我能够通过仅指定一个模式来运行单个测试之前:

这种方法在转换后不起作用。运气不好还是有办法?