草庐IT

power_unit

全部标签

unit-testing - 仅使用 golang 中的标准库断言特定错误

假设我有一个函数,它为位于特定路径的文件返回base64编码字符串。funcgetFile(pathstring)(string,error){imgFile,err:=ioutil.ReadFile(path)iferr!=nil{return"",fmt.Errorf("Erroropeningimagefile:%s",err)}base64:=base64.StdEncoding.EncodeToString(imgFile)returnbase64,nil}现在,我正在为此函数编写表驱动测试,它们现在看起来像这样。funcTestGetFile(t*testing.T){ty

unit-testing - 接收方方法相互调用时的单元测试

假设有一个User包,它只包含两个简单的方法Hello表示“你好”Say实现用户说话的方式原创packageuserimport"fmt"typeuserstruct{}func(uuser)Hello(){u.Say("Hello")}func(uuser)Say(sentencestring){fmt.Println(sentence)}但是,我们无法对Hello进行单元测试,因为它依赖于不可模拟的Say。在StackOverflow和Goole上翻来覆去,我总结了两种解决问题的方法,但都不是完美的。方法1-使用lambda函数用户.gopackageuserimport"fmt"

unit-testing - 如何在测试用例中模拟结构的方法调用

这是该结构及其方法的示例代码typeAstruct{}func(a*A)perfom(string){........}然后我想从包外的函数invoke()调用方法,示例代码vars:=A{}funcinvoke(urlstring){out:=s.perfom(url)......}我想通过模拟A的perform方法为函数invoke编写测试用例。在java中,我们有mockito,jmock框架来stub方法调用。有没有办法在go中,不用在源码中引入interfaces就可以模拟struct的方法调用? 最佳答案 要模拟方法调用

unit-testing - 如何使用定义为常量的文件路径测试 Go 代码

我正在为我的一个项目编写测试,其中涉及固定文件路径和基本URL。对我来说,定义它们的最合乎逻辑的方法是通过相关模块中的公共(public)/私有(private)常量,但这会妨碍良好的测试实践。我该如何解决这个问题?我搜索了一个可能的解决方案,发现我可以为需要路径的结构定义两个构造函数:一个定义默认路径,另一个接受自定义路径funcConstruct(paramstring)MyStruct{returnMyStruct{Param:param,Path:"/default/path"}}funcConstructWithPath(param,pathstring)MyStruct{r

unit-testing - Go 中用于单元表测试的错误类型检查

我想测试针对tabletest返回的错误类型预期结果,如下所示:vartabletest=[]struct{instructionstringwantstringerrerror}{{"synonymforhi","hello",nil},//input,retval,errtype{"synonymforhig","",TranslationError{}},{"sssnymmforhi","",InstructionError{}},}funcTestThesaurus(t*Testing){for_,testcase:=rangetabletest{got,err:=Thesau

unit-testing - 多返回值函数的表测试

在深入研究tabledriventests之后,我正在学习Go语言。我遇到了以下问题:我有一个返回多个值的函数//Halvesanintegerandandreturnstrueifitwasevenorfalseifitwasodd.funchalf(nint)(int,bool){h:=n/2e:=n%2==0returnh,e}我知道对于half(1)返回值应该是0,false而对于half(2)它应该匹配1,true,但我似乎无法弄清楚如何将其放在table上。怎么会有类似下面的东西呢?varhalfTests=[]struct{inintoutstring}{{1,},{3,

unit-testing - 当依赖项不公开接口(interface)时,在 GO 中模拟依赖项的最佳方法是什么

我试图模拟https://gopkg.in/olivere/elastic.v2它被证明是一场噩梦。我通常使用gomock但我不能,因为没有用于dep的接口(interface)文件。解决此问题的最佳方法是什么? 最佳答案 创建您自己的界面。也不需要很完整,只需要涵盖你实际使用的方法即可。假设您有一个类型Foo,它具有以下方法:Bar()、Baz()和Qux()。然后您在代码中使用它:funcFrobnicate(f*Foo)err{iferr:=f.Bar()error;err!=nil{returnerr}returnnil}只

unit-testing - 打开和读取文件的单元测试功能

我正在学习如何使用一个简单的程序来读取文件,并且正在为我的程序添加单元测试。这样做时我遇到了一个问题/问题。我想对下面的函数进行单元测试,我的问题是该函数采用文件的名称,然后打开并处理该文件。在测试期间,我不想实际将真实文件传递给它。我想知道这是我可以以某种方式模拟的东西,以便我可以将它传递给一个“假”文件并让它处理它吗?谢谢!funcopenAndReadFile(fileNamestring)[][]string{file,err:=os.Open(fileName)iferr!=nil{fmt.Printf("Failedtoreadfile:%s",fileName)}r:=c

unit-testing - 在 go 中测试连接的正确方法

我正在用测试覆盖项目,为此我需要虚拟TCP服务器,它可以接受连接、向其中写入/读取数据、关闭它等...我找到了this关于堆栈溢出的问题,涵盖了模拟连接,但并未涵盖我实际需要测试的内容。我的想法依赖于这个article作为起点,但是当我开始实现channel让服务器将一些数据写入新打开的连接时,我在写入channel时遇到了不可调试的死锁。我要实现的是写一些数据到服务器的channel,比如sendingQueuechan*[]byte,所以后面对应[]byte将被发送到新建立的连接。在这些小研究中,我尝试在向channel发送数据之前/之后调试和打印消息,并尝试在程序的不同位置从ch

unit-testing - 如何在 Go 中测试调用期望

我有一个要测试的MyClass类。MyClass有一个调用内部服务器做某事的void方法。func(d*MyClass)SendToServer(args)dostuff....server.Send(myMessage)我想模拟服务器调用Send,但由于该方法是一个void方法,我无法确定我是否真的正确调用了它。这些是我想到的选项:使用gomock,模拟服务器,对服务的发送方法设置期望创建我自己的模拟服务器,并用一堆验证“覆盖”发送方法。像这样的东西:func(d*MockedServer)发送(消息)//验证消息...创建我自己的MockServer,但不是在方法内验证预期,而是将