我在main.go中定义了无法在main_test.go中访问的函数。但是,在一些在线教程中,我看到函数是可访问的:我想了解其中的区别,以及如何以惯用的方式构建这些函数。具体来说,我有一个包含多个二进制文件的应用程序:myapp/cmd/app/main.gomyapp/cmd/cli/main.go我目前在main.go文件的funcmain中运行了很多简单的单元测试逻辑。我只是测试单个函数并让它们打印输出,如果我能避免的话,我不会尝试调用“测试”套件的全部功能。由于此时我在main.go顶部的测试太长了,我想将它们移动到特定的测试文件中,例如:myapp/cmd/app/main_
我正在尝试测试以下分支:if_,err:=os.Stat(path);err!=nil{ifos.IsNotExist(err){continue}returnerrors.File().AddDetails(err)}显然,如果path不存在,os.Stat将抛出错误。ReadingtheGolangdocumentation不返回有关os.Stat可能返回的错误的详细信息。有没有办法让os.Stat抛出另一种错误? 最佳答案 您可以通过传递无效的文件名导致错误,例如IsNotExist返回false。packagemainimp
我有以下文件树结构:-app/---tool/-----/tool_test.go-----/tool.go-----/proto/proto.go-----/proto/proto_test.go我需要使用一个(虚拟)结构在tool_test.go和proto_test.go中实现一个接口(interface):typeDummyRetrieverstruct{}func(dummy*DummyRetriever)Retrieve(namestring)(string,error){return"",nil}如果我只在tool_test.go中定义它,我无法在proto_test.g
这个问题在这里已经有了答案:SeparatingunittestsandintegrationtestsinGo(6个答案)关闭5年前。我正在尝试在现有的Go项目上自动运行单元测试。它已经有很多现有的测试,这些测试可以做非单元测试的事情,比如联系外部服务和写入数据库。我想使用命名约定从自动化中排除这些测试文件。假设项目的结构是这样的:gopath/|-package1.go|-package1_unit_test.go|-package1_e2e_test.go|-package2/|-package2.go|-package2_unit_test.go|-package2_e2e_t
我正在研究来自https://github.com/golang/example/tree/master/outyet的示例项目.testfile不包括http.Head(url)的情况返回错误。我想扩展单元测试以涵盖记录错误的if语句(https://github.com/golang/example/blob/master/outyet/main.go#L100)。我想模拟http.Head(),但我不确定该怎么做。如何做到这一点? 最佳答案 http.Head函数只是调用Headmethod在默认HTTP客户端上(显示为htt
我正在尝试解决KarateChopGo中的kata作为练习,并在我的测试用例中遇到了这个编译器错误:toomanyargumentsincalltothis.T.common.Fail我将testing.T包装到一个带有附加方法的结构中,作为一个匿名结构字段:packagemainimport("fmt""testing")typeassertionsstruct{*testing.T}func(thisassertions)assert_equal(expectedint,actualint){if(expected!=actual){this.Fail(fmt.Sprintf("F
假设我有一个函数,它为位于特定路径的文件返回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
假设有一个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"
这是该结构及其方法的示例代码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的方法调用? 最佳答案 要模拟方法调用
我正在为我的一个项目编写测试,其中涉及固定文件路径和基本URL。对我来说,定义它们的最合乎逻辑的方法是通过相关模块中的公共(public)/私有(private)常量,但这会妨碍良好的测试实践。我该如何解决这个问题?我搜索了一个可能的解决方案,发现我可以为需要路径的结构定义两个构造函数:一个定义默认路径,另一个接受自定义路径funcConstruct(paramstring)MyStruct{returnMyStruct{Param:param,Path:"/default/path"}}funcConstructWithPath(param,pathstring)MyStruct{r