我想测试一个函数,它不返回任何值,而是触发其他函数。在阅读有关测试的信息时,我发现这称为行为验证的信息,并且通过模拟我可以检查触发了哪些功能以及触发顺序。但是,我在为我的代码实现正确的模拟技术时遇到了问题。让我们考虑以下接口(interface)和结构的一个简单示例(该示例非常基础只是为了便于解释):typeExampleInterfaceinterface{DoSomething(argint)DoEvenMore(argint)AndEvenMore(argint)}typeExampleStructstruct{Idstring//Otherfields}func(e*Examp
我正在尝试将表单变量添加到Gohttp请求。这是我的Go测试的样子:funcsample_test(t*testing.T){handler:=&my_listener_class{}reader:=strings.NewReader("number=2")req,_:=http.NewRequest("POST","/my_url",reader)w:=httptest.NewRecorder()handler.function_to_test(w,req)ifw.Code!=http.StatusOK{t.Errorf("Homepagedidn'treturn%v",http.S
我正在尝试将表单变量添加到Gohttp请求。这是我的Go测试的样子:funcsample_test(t*testing.T){handler:=&my_listener_class{}reader:=strings.NewReader("number=2")req,_:=http.NewRequest("POST","/my_url",reader)w:=httptest.NewRecorder()handler.function_to_test(w,req)ifw.Code!=http.StatusOK{t.Errorf("Homepagedidn'treturn%v",http.S
我有一个HTTP处理程序,它为每个请求设置上下文截止时间:funcsubmitHandler(streamchandata)http.HandlerFunc{returnfunc(whttp.ResponseWriter,r*http.Request){ctx,cancel:=context.WithTimeout(r.Context(),5*time.Second)defercancel()//readrequestbody,etc.select{casestream我很容易就能测试http.StatusNoContentheader,但我不确定如何测试select语句中的大小写。在
我有一个HTTP处理程序,它为每个请求设置上下文截止时间:funcsubmitHandler(streamchandata)http.HandlerFunc{returnfunc(whttp.ResponseWriter,r*http.Request){ctx,cancel:=context.WithTimeout(r.Context(),5*time.Second)defercancel()//readrequestbody,etc.select{casestream我很容易就能测试http.StatusNoContentheader,但我不确定如何测试select语句中的大小写。在
我在包pack1下有以下代码。文件名是pack1.gopackagepack1varPack1Intint=42varpack1Float=3.14funcReturnStr()string{return"Helloworld!"}以及主程序中的以下代码。文件名是package_test.gopackagemainimport("fmt""./pack1")funcmain(){vartest1stringtest1=pack1.ReturnStr()fmt.Printf("Returnstringfrompack1:%s\n",test1)fmt.Printf("Integerfro
我在包pack1下有以下代码。文件名是pack1.gopackagepack1varPack1Intint=42varpack1Float=3.14funcReturnStr()string{return"Helloworld!"}以及主程序中的以下代码。文件名是package_test.gopackagemainimport("fmt""./pack1")funcmain(){vartest1stringtest1=pack1.ReturnStr()fmt.Printf("Returnstringfrompack1:%s\n",test1)fmt.Printf("Integerfro
我在Go中构建了一个快速简单的API来查询ElasticSearch。现在我知道它可以完成,我想通过添加测试来正确地完成它。我已经抽象了一些我的代码,以便它可以进行单元测试,但是我在模拟弹性库时遇到了一些问题,因此我认为最好尝试一个简单的案例来模拟它。import("encoding/json""github.com/olivere/elastic""net/http")...funcCheckBucketExists(namestring,client*elastic.Client)bool{exists,err:=client.IndexExists(name).Do()iferr
我在Go中构建了一个快速简单的API来查询ElasticSearch。现在我知道它可以完成,我想通过添加测试来正确地完成它。我已经抽象了一些我的代码,以便它可以进行单元测试,但是我在模拟弹性库时遇到了一些问题,因此我认为最好尝试一个简单的案例来模拟它。import("encoding/json""github.com/olivere/elastic""net/http")...funcCheckBucketExists(namestring,client*elastic.Client)bool{exists,err:=client.IndexExists(name).Do()iferr
由于外部库不公开接口(interface)(因此不可模拟)而只公开纯函数,因此我很难用Go编写单元测试。甚至像Googledon't这样的大公司,所以我想知道我的方法是否足够好。库提供interface而不是只有功能的包以便让用户模拟它们不是很好的做法吗?到目前为止,我提出的解决方案是用接口(interface)的实现来包装这些包,但这看起来工作量太大。我举个例子。我的函数看起来像这样funcAnyFunction()error{sess:=session.Get("blabla")//logicinhere...}其中session是一个导入的包,它返回一个struct。我无法模拟包