我正在使用Gorillamux和net/http包创建一些路由,如下所示packageroutes//someimports//somestufffuncAddQuestionRoutes(r*mux.Router){s:=r.PathPrefix("/questions").Subrouter()s.HandleFunc("/{question_id}/{question_type}",getQuestion).Methods("GET")s.HandleFunc("/",postQuestion).Methods("POST")s.HandleFunc("/",putQuestio
我有一个应用程序(epazote),一旦启动就永远运行,但我想在它阻塞/等待直到按下ctrl+c之前测试一些值或被杀了。这是一个小例子:http://play.golang.org/p/t0spQRJB36packagemainimport("fmt""os""os/signal")typeIAddStringinterface{AddString(string)}typeaddStringstruct{}func(self*addString)AddString(sstring){fmt.Println(s)}funcblock(aIAddString,sstring){//test
我的代码中有相当多的组件具有持久的go-routines,它们监听事件以触发操作。大多数情况下,他们没有理由(在测试之外)在完成该操作后发回通知。但是,我的单元测试使用sleep来等待这些异步任务完成://Sendnotificationevent.mock.devices这似乎很糟糕,但我还没有想出一个更好的解决方案,它不会给非测试使用增加不合理的开销。有没有我错过的合理解决方案? 最佳答案 惯用的方法是将donechannel与您的数据一起传递给工作程序go-routine。go-routine应该closedonechanne
最近希望为golang写一个单元测试。函数如下。func(s*containerStats)Display(wio.Writer)error{fmt.Fprintf(w,"%s%s\n","hello","world")returnnil}那么如何测试“funcDisplay”的结果是“helloworld”呢? 最佳答案 您可以简单地传入您自己的io.Writer并测试写入其中的内容是否符合您的预期。对于这样的io.Writer,bytes.Buffer是一个不错的选择,因为它只是将输出存储在其缓冲区中。funcTestDispl
如何在我的测试中填写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.S
我正在用Go编写一个使用Googlecloudstorage的appengine应用程序。.例如,我的“阅读”代码如下所示:client,err:=storage.NewClient(ctx)iferr!=nil{returnnil,err}deferfunc(){iferr:=client.Close();err!=nil{panic(err)}}()r,err:=client.Bucket(BucketName).Object(id).NewReader(ctx)iferr!=nil{returnnil,err}deferr.Close()returnioutil.ReadAll(
我想要一个单元测试来验证特定命令行标志是否在枚举中。这是我要编写测试的代码:varformatTypestringconst(text="text"json="json"hash="hash")funcinit(){const(defaultFormat="text"formatUsage="desiredoutputformat")flag.StringVar(&formatType,"format",defaultFormat,formatUsage)flag.StringVar(&formatType,"f",defaultFormat,formatUsage+"(shortha
如何在第一次测试失败后让gotestseveral/packages/...停止?尽管已经有一些东西可以使用,但构建和执行其余测试需要一些时间。 最佳答案 Go1.10添加一个新标志failfast进行测试:新的gotest-failfast标志禁止在任何测试失败后运行其他测试。请注意,允许完成与失败测试并行运行的测试。https://golang.org/doc/go1.10但是,请注意这在跨包中不起作用:https://github.com/golang/go/issues/33038这里有一个解决方法:forsin$(goli
我有一个由几个包组成的库。运行测试时,我使用“-cover”标志,并分别显示每个包的覆盖率信息。如下所示:---PASS:TestSampleTestSuite(0.00s)PASScoverage:28.7%ofstatementsokgithub.com/path/to/package113.021s?github.com/path/to/package2[notestfiles]===RUNTestAbc---PASS:TestAbc(0.43s)PASScoverage:27.7%ofstatements有没有什么方法可以轻松获得完整的覆盖率概览,以便更好地了解整个项目的覆盖率
有人告诉我,为使用AppEngine服务(例如数据存储或内存缓存)的代码运行单元测试的最佳解决方案是在子进程中运行开发服务器,但我不确定如何操作。有人成功运行过这种测试并可以分享解决方案吗?适用于Go的AppEngineSDK使用Pythondev_appserver;seethisthread. 最佳答案 您应该查看GoogleAppEngineGotestinglibrary作者:乔什·马什。 关于unit-testing-如何为在Go中使用AppEngine服务的代码运行单元测试?