草庐IT

unit-testing - 如何测试 ioutil.ReadFile 和 os.Stat?

我有以下功能:funcGetDataFromFile(pathstring)([]byte,error){_,err:=os.Stat(path)iferr!=nil{returnnil,err}data,err:=ioutil.ReadFile(path)iferr!=nil{returnnil,err}returndata,nil}我想在函数ioutil.ReadFile和os.Stat(path)抛出错误时对其进行测试。我知道我可以为os.Stat(path)创建不存在的路径,但是如何在没有“解决方法”和猜测函数工作方式的情况下测试此类函数?问候。 最

unit-testing - 是否可以对我的包不导入特定包进行单元测试?

我想确保我的Go包使用“dal”包提供的var实例,并且不会意外地直接导入和使用数据库访问包。我想我可以在源代码上进行正则表达式搜索,但我想知道是否有办法通过标准Go测试来确保规则?只是想知道我要做什么:接口(interface)包:packagedaltypeUserDalinterface{GetUser(idint)User}实现包:packagedal_db_specificimport("some_db""dal")typeUserDalDbSpecificstruct{}func(_UserDalDbSpecific)GetUser(idint)User{some_db.e

unit-testing - 真正的单元测试总是可以并行运行吗?

背景:我正在编写大量go代码,使用gotest工具和提供的"testing"包进行测试。我所做的大部分测试都是TDD规程中的单元测试。这些被测试的“单元”永远不允许依赖于有状态的外部性,如持久存储、网络跃点等,但通常在“构造函数/构建器”函数中接收这些外部性的虚假内存实现(是的,我知道它们不是传统意义上的构造函数)。问题:gotest工具总是以相同的确定顺序运行测试函数,这一直困扰着我。在某些情况下,这允许竞争条件隐藏在代码中。找到这些错误的一种方法是设置-race标志。另一个可能是始终并行运行单元测试......问题:是否存在曾经孤立单元测试不能或不应该总是并行运行的情况(使用-并行

unit-testing - os.FileInfo 模拟不匹配

在我的一个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

unit-testing - 处理程序单元测试的模拟功能

我被模拟测试困住了,这是我的处理程序路线: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

unit-testing - 为从中读取的函数填充 os.Stdin

如何在我的测试中填充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

unit-testing - Gomega 的 Equal() 可以处理多个值吗?

我正在测试使用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

unit-testing - 需要帮助查明中间件测试(Golang)中零引用错误的原因

我在为我的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

unit-testing - 单元测试 Google 的 Go API 客户端

我目前正在使用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

unit-testing - 使用 httptest 或 http 包模拟服务器故障

如何在隔离单元测试中使用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