草庐IT

unit-testing - 如果测试文件在 go 1.4 及以下版本的系统上运行,我该如何跳过它?

我有一个包含一些应该在Go1.5+上运行的测试的文件。我能够使用runtime.Version()获取Go运行时版本并进行各种比较。但是,测试文件导入了golang.org/x/net/http2。http2包需要来自net/http的request.Cancel(),但这仅适用于Go1.5+。这导致我的CI环境中出现这些错误,导致构建失败:../../../golang.org/x/net/http2/transport.go:214:req.Cancelundefined(type*http.RequesthasnofieldormethodCancel)../../../gola

unit-testing - 使用 Gomock 测试返回错误 : Expected call has already been called the max number of times

我正在使用Gomockhttps://godoc.org/github.com/golang/mock和模仿这个测试的源代码是:packagesqsimport("fmt""log""os""runtime""github.com/aws/aws-sdk-go/aws/session""github.com/aws/aws-sdk-go/aws""github.com/aws/aws-sdk-go/service/sqs""github.com/aws/aws-sdk-go/service/sqs/sqsiface")varsess*session.Sessionvarsvc*sqs.

unit-testing - 测试 assert.Equal 除了一个字段

我正在编写用于在数据库中读取/写入结构的测试,其中一个字段是在数据库中自动计算的时间戳。因此,当我编写结构时,它的时间戳为0,但当我从数据库中读取它时,时间戳具有实际值。我想比较这两个值但忽略自动计算的字段。可能吗? 最佳答案 在测试之前设置另一个“except”字段:now:=time.Now()expected:=SomeStruct{ID:123,Name:"Test",Timestamp:now,...}result,_:=db.Select(....)result.Timeestamp=nowif!reflect.Deep

unit-testing - 如何在构建期间运行 mockgen?

我已经开始使用gomock为单元测试创​​建模拟对象。Gomock要求我运行带有特定参数的mockgen命令,以便为模拟生成代码。每次被模拟的接口(interface)发生变化时,都需要再次执行此操作。因此,我认为让gobuild使用适当的参数运行mockgen可能是有意义的。有没有办法让gobuild在构建包之前运行脚本或shell命令?如果没有,您如何生成模拟并使它们保持最新? 最佳答案 我认为gobuild中不存在任何使这成为可能的钩子(Hook)。一种解决方案是使用make。您的Makefile可能类似于:.PHONY:bu

unit-testing - 我如何在单元测试中限制/门内存使用

有没有办法在golang的单元测试期间限制内存使用量/增长量?例如在java中,我们可以这样做:longbefore=Runtime.getRuntime().freeMemory()//allocateabunchofmemorylongafter=Runtime.getRuntime().freeMemory()Assert.AssertTrue(before-after(粗略地)断言我们没有使用超过100个字节。 最佳答案 使用Go基准测试来分析内存使用情况。例如:mem.go:packagememfuncmemUse(){v

unit-testing - 您如何为连接到授权帐户的库编写测试?

我正在编写一个使用gmailAPI的库。几乎每个功能都需要连接到gmailAPI并在所有需要进行身份验证的情况下正常工作。例如,这个库具有更改电子邮件标签的能力,因此为了测试它,我可以创建一个虚拟帐户、获取凭据并在收件箱中设置“测试电子邮件”、更改它们的标签并检查是否它们已正确更改,但第三方如何使用该gmail帐户执行单元测试?要使用它,他们需要访问该帐户,这将允许他们更改电子邮件标签(和其他内容)并使我的单元测试无效。我的另一个想法是即时生成一批测试电子邮件,然后在测试完成后删除它们的所有痕迹。这样每个运行测试的第三方都只能使用他们自己的测试帐户。我只是想知道是否有更标准的方法来做到

unit-testing - 单元测试 golang 处理程序

这是我编写的用于从mongodb检索文档的处理程序。如果找到文档,我们将相应地加载和呈现模板。如果失败,它将重定向到404。funcEventNextHandler(whttp.ResponseWriter,r*http.Request){search:=bson.M{"data.start_time":bson.M{"$gte":time.Now()}}sort:="data.start_time"varresult*Eventerr:=db.Find(&Event{},search).Sort(sort).One(&result)iferr!=nil&&err!=mgo.ErrNo

unit-testing - 在 Visual Studio Code 中调试 Go 测试

在我的Windows机器上,我安装了VisualStudioCode。要手动运行测试,我进入控制台到项目文件夹并输入gotestmain_test.go它完美地工作。但我有一种情况需要调试我的测试以了解发生了什么。为此,我打开launch.json并添加一个配置{"name":"Tests","type":"go","request":"launch","mode":"test","remotePath":"","port":2346,"host":"127.0.0.1","program":"${workspaceRoot}","env":{},"args":["main_test.

unit-testing - 测试 Golang 协程

我一直在四处寻找,但到目前为止只找到了类似的文章here作者:AriejandeVroom。我想知道我是否可以将goroutine引入单元测试,以便它可以精确地计算正在运行的goroutines的并发数量,并可以告诉我它们是否是按照我所说的数量正确生成的goroutine。例如,我有以下代码..import("testing""github.com/stretchr/testify/assert")funccreateList(jobint,donechanbool){time.Sleep(500)//dosomethingtime.Sleep(500)done

unit-testing - Go 中最惯用的方法是测试依赖于具有大量方法的结构的代码?

假设我有一个UserRepository结构,它封装了与数据库交互的逻辑。这个结构有一组方法,比如:查找全部()findById()查找名称()保存()等等....还有另一个结构(例如,我们称之为UserService)依赖于UserRepository结构。为了测试UserService,我需要模拟UserRepository的功能。我知道这样做的唯一方法是为UserRepository提供接口(interface)并使UserService依赖于它而不是UserRepository结构。它将允许创建接口(interface)的模拟实现,并在测试中将其设置为UserService的依