背景:我正在编写大量go代码,使用gotest工具和提供的"testing"包进行测试。我所做的大部分测试都是TDD规程中的单元测试。这些被测试的“单元”永远不允许依赖于有状态的外部性,如持久存储、网络跃点等,但通常在“构造函数/构建器”函数中接收这些外部性的虚假内存实现(是的,我知道它们不是传统意义上的构造函数)。问题:gotest工具总是以相同的确定顺序运行测试函数,这一直困扰着我。在某些情况下,这允许竞争条件隐藏在代码中。找到这些错误的一种方法是设置-race标志。另一个可能是始终并行运行单元测试......问题:是否存在曾经孤立单元测试不能或不应该总是并行运行的情况(使用-并行
在我的一个golang项目中,我为测试用例模拟了os.FileInfo。我不确定我是否正确理解了golang的接口(interface)处理。据我所知,以下代码应该可以工作,但我收到一个编译器错误,指出接口(interface)不匹配。我修改了thisgo-doc示例,以防您想自己测试一下。packagemainimport("fmt""io/ioutil""log")typefileinterface{Name()string}funcreadFiles()[]file{files,err:=ioutil.ReadDir(".")iferr!=nil{log.Fatal(err)}r
我被模拟测试困住了,这是我的处理程序路线:r.Handle("/users/{userID}",negroni.New(negroni.HandlerFunc(validateTokenMiddleware),negroni.Wrap(http.HandlerFunc(func(whttp.ResponseWriter,r*http.Request){getUserDetailsHandler(w,r,db)})),)).Methods("GET")这是我的处理程序:funcgetUserDetailsHandler(whttp.ResponseWriter,r*http.Reques
如何在我的测试中填充os.Stdin以获取使用扫描仪从中读取的函数?我使用以下函数通过扫描器请求用户命令行输入:funcuserInput()error{scanner:=bufio.NewScanner(os.Stdin)println("Whatisyourname?")scanner.Scan()username=scanner.Text()/*...*/}现在如何测试这种情况并模拟用户输入?以下示例不起作用。标准输入仍然是空的。funcTestUserInput(t*testing.T){varfile*os.Filefile.Write([]byte("Tom"))os.St
我正在测试使用gomega向服务器发送模拟请求的功能,我想验证1.请求已开始2.请求已完成。为此,我返回两个bool值。在下面的示例中,它们都应评估为真,但值可能会发生变化。我试过这个:g:=gomega.NewGomegaWithT(t)...g.Eventually(func()(bool,bool){...start=falseend=trueif(request.status=="started"){start=true}if(request.status=="complete"){end=true}returnstart,end}).Should(Equal((true,tr
我在为我的http处理程序(特别是身份验证中间件)编写单元测试时遇到了“无效内存地址或nil指针取消引用”错误。这里是要测试的函数:funcAuthenticate(nexthttp.Handler)http.Handler{returnhttp.HandlerFunc(func(whttp.ResponseWriter,req*http.Request){varerrerrorck,err:=req.Cookie("session")iferr!=nil{w.Header().Add("Authorization","expired/invalid")next.ServeHTTP(w
我目前正在使用Google的APIgoclient使用Go编写工作流.我是Go的新手,在对客户的服务进行单元测试时遇到了麻烦。以下是在GoogleCloud项目中启用API的示例方法。func(gcloudService*GCloudService)EnableApi(projectIdstring,apiIdstring)error{service,err:=servicemanagement.New(gcloudService.Client)iferr!=nil{returnerr}requestBody:=&servicemanagement.EnableServiceReque
如何在隔离单元测试中使用httptest或http包模拟服务器故障?详细信息:我一直在使用gorillawebsockets,所以mt,msg,err:=t.conn.ReadMessage()mt值必须是-1当服务器宕机时。我尝试了以下作为主要选项:varsrv*httptest.Serversrv=httptest.NewServer(http.HandlerFunc(func(whttp.ResponseWriter,r*http.Request){_,err:=wsUpgrader.Upgrade(w,r,nil)iferr!=nil{t.Fatal(err)}srv.Clos
我正在编写一个小型slack机器人,它可以帮助我的开发人员从GoogleCloudSQL获取数据库转储。我用https://godoc.org/cloud.google.com/go写的大量打包,但现在我在编写单元测试时遇到了麻烦。我想开源代码供其他人使用,但想贡献一些遵循基本准则的东西,即具有测试覆盖率。我读过很多关于模拟、使用接口(interface)的文章,谷歌库因在测试中使用起来很痛苦而臭名昭著,而且谷歌人看不起模拟。但是还是无法迈出编写测试的第一步,例如一段代码:typeStorageClientstruct{client*storage.ClienttargetBuck
有一个函数在我负责单元测试的代码中不断出现(还没测试),定义如下://GetRetreivesanerrorwiththegivenaccesscode.funcGet(codeAccessCode)*ErrorSt{iferr,ok:=Errors[code];ok{err.Stack=utilityCore.GetCleanStack(logger.Instance.GetProjectNames())return&err}err:=NewError(string(ACPanic),fmt.Sprintf("Error'%s'can'tberetreived.",code),ESS