在我的Go包中有几个基准文件,例如map1_benchmark_test.go和map2_benchmark_test.go。在每个*_benchmark_test.go文件中,都有多个基准函数,例如funcBenchmarkMapTravel(b*testing.B)和funcBenchmarkMapGet(b*testing.B).问题是,我怎样才能只测试一个基准函数?我尝试阅读一些手册,但运行gohelptest对基准测试一无所知。 最佳答案 Descriptionoftestingflags-test.benchpatter
当终端/控制台测试运行实际以红色或绿色文本显示其输出时,我喜欢它。似乎很多可用于Go的测试库都有这个。但是,我只想使用Go附带的默认测试包。有没有办法用红色和绿色对其输出进行着色? 最佳答案 您可以使用grc,一种通用的着色剂,可以为任何东西着色。在Debian/Ubuntu上,使用apt-getinstallgrc安装。在Mac上,brewinstallgrc.在你的主目录中创建一个配置目录:mkdir~/.grc然后在~/.grc/grc.conf中创建您的个人grc配置:#Go\bgo.*test\bconf.gotest然后
我们的部分代码是时间敏感的,我们需要能够保留一些东西,然后在30-60秒等内释放它,我们可以做一个time.Sleep(60*time.Second)我刚刚实现了时间接口(interface),并且在测试期间使用了时间接口(interface)的stub实现,类似于thisgolang-nutsdiscussion.但是,time.Now()在多个站点中被调用,这意味着我们需要传递一个变量来跟踪我们实际睡了多少时间。我想知道是否有另一种方法可以在全局范围内stubtime.Now()。是否可以进行系统调用来更改系统时钟?也许我们可以编写自己的时间包,它基本上包含时间包但允许我们更改它?
我正在为我的Go应用程序编写一些单元测试。然而,测试失败,因为它找不到配置文件。通常二进制文件会在conf/*.conf路径下的工作目录中查找配置文件。我认为浏览到有conf/的目录并在其中运行gotest可以解决它,但它仍然报告文件系统找不到路径指定。如何告诉gotest使用某个目录作为工作目录,以便实际执行测试? 最佳答案 您也许可以使用Caller来获取当前测试源文件的路径,如下所示:packagesampleimport("testing""runtime""fmt")funcTestGetFilename(t*testin
我对在go中为“未导出(私有(private))函数”创建单元测试很感兴趣。但是,基本上很难在测试包中创建单元测试,因为我必须将它们“公开”。最终,这违背了他们私密的全部意义。关键是这些辅助函数有助于模块化,现在它们是模块化的,如果能够为它们创建单元测试而不使除测试包之外的所有人都可以使用它们,那就太好了,它们不是应该访问的函数或由测试套件或实际包本身以外的任何其他人使用。有什么建议吗?是否可以仅导出到自己的包和1个额外的包或类似的东西? 最佳答案 在包中创建一个测试文件library_test.gopackagemypkgfunc
是否可以使用gotest跳过/排除某些测试?我有相当多的集成类型测试,它们调用作为标准go测试编写的rest服务,并使用gotest运行。开发新功能时,有时跳过一些测试很有用,例如,如果新功能尚未部署在测试服务器上并且我仍想运行所有现有测试(那些新测试除外)新功能)。我知道-run,但我不想指定我想要运行的所有测试,那将是一个很长的列表。同时,我还无法编写排除测试的正则表达式。另一种选择是不提交不在同一分支中运行的测试,但如果我可以指定要排除的内容会更容易。 最佳答案 Testingpackage有SkipNow()和Skip()方
我目前正在思考如何编写测试来检查给定的代码是否出现panic?我知道Go使用recover捕捉panic,但与Java代码不同的是,您无法真正指定在发生panic时应该跳过哪些代码或您有什么。所以如果我有一个函数:funcf(t*testing.T){deferfunc(){ifr:=recover();r!=nil{fmt.Println("Recoveredinf",r)}}()OtherFunctionThatPanics()t.Errorf("Thecodedidnotpanic")}我无法确定是OtherFunctionThatPanics发生了panic并且我们恢复了,还是
我有一个像这样的表驱动测试用例:funcCountWords(sstring)map[string]intfuncTestCountWords(t*testing.T){vartests=[]struct{inputstringwantmap[string]int}{{"foo",map[string]int{"foo":1}},{"foobarfoo",map[string]int{"foo":2,"bar":1}},}fori,c:=rangetests{got:=CountWords(c.input)//TODOtestwhetherc.want==got}}我可以检查长度是否相
gotest命令只覆盖一个目录中的*_test.go文件。我想gotest整个项目,这意味着测试应该覆盖目录./中的所有*_test.go文件以及目录./.下的每个子树目录执行此操作的命令是什么? 最佳答案 这应该运行当前目录及其所有子目录中的所有测试:$gotest./...这应该运行给定特定目录的所有测试:$gotest./tests/..../unit-tests/..../my-packages/...这应该运行所有带有前缀为foo/:的导入路径的测试$gotestfoo/...这应该运行所有以foo为前缀的导入路径:$go
我对依赖关系感到困惑。我希望能够用模拟函数调用替换一些函数调用。这是我的代码片段:funcget_page(urlstring)string{get_dl_slot(url)deferfree_dl_slot(url)resp,err:=http.Get(url)iferr!=nil{return""}deferresp.Body.Close()contents,err:=ioutil.ReadAll(resp.Body)iferr!=nil{return""}returnstring(contents)}funcdownloader(){dl_slots=make(chanbool,