草庐IT

acceptance-testing

全部标签

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 - 无法在 golang : "unable to open database file [recovered]"-error 中打开 SQLite 数据库

我刚开始学习golang,不确定我的错误是概念上的还是语言上的。这很奇怪,因为只有在对我的代码进行单元测试时才会出现错误。如果我“去运行”一切正常。作为sqlite驱动程序,我使用mattn/go-sqlite3.这里是问题发生的地方:funcdbExec(command*string){db,err:=sql.Open("sqlite3",dbPath)//Pathanddriveraresetcorrecrtlydeferdb.Close()iferr!=nil{//Noproblemherepanic(err)}_,err=db.Exec(*command)iferr!=nil{

testing - 测试 Go 中未导出函数的命名约定

我无法追溯我是从哪里知道的,但通常情况下,如果有人为方法Foo编写测试,则相应的测试名为TestFoo。如果测试一个未导出的函数,比如foo,那么测试的名称应该是什么?我的问题来自这样一个事实,当要求为未导出的函数生成测试时,JetBrainsIDEforGo会生成类似Test_foo的内容。这种行为可能是有道理的,因为如果你有Foo并且它是未导出的counterpatfoo在同一个包中,你会想以某种方式对它们进行不同的测试(在至少对于IDE中的跳转测试功能而言)。那么在未导出的函数之后命名测试有什么约定吗?顺便说一句:Go的文档testing包说,如果是,则执行测试:anyfunct

sockets - http: 接受错误:接受 tcp [::]:9000: accept4: 打开的文件太多; 1s 重试

进程的pid是1996291。/proc/1996291/fd中有65534个fd,大部分fd都是socket,像这样:lrwx------1rootroot64Dec3013:5910000->socket:[952574733]lrwx------1rootroot64Dec3013:5910001->socket:[952566188]我知道括号中的数字是套接字的inode。/proc/net/tcp中的每个套接字都应该有一个相同的inode。但是有的inode能找到,有的找不到:cat/proc/net/tcp|grep952574733如果我找到inode,输出如下:sllo

go - Windows XP SP3 上的 Accept() 超时设置

我在WindowsXPSP3上使用go1.9.2windows/386时遇到了严重问题。Accept()会永远阻塞,即使我使用SetDeadline()设置了超时,直到程序退出。我认为这很重要,因为我无法在需要时阻止听众。此外,conn.Read()也会永远阻塞,但我没有将它包含在示例中以使其更简单。packagemainimport("fmt""net""time")funcmain(){listener,err:=net.Listen("tcp",":8888")iferr!=nil{fmt.Println(err.Error())return}tcplistener:=liste

testing - 测试后清理数据

我编写测试,在这个测试中我使用一些保存的数据文件、数据库记录等。我应该在测试结束前删除这些数据吗?例如,我检查userfinderfunc(IDint)User(*User){//myfinderhere}在测试之前,我必须为数据库创建User。那么,我是否应该做类似的事情deferdb.Clean()???与文件相同*os.File 最佳答案 为了让我们都在同一个页面上,有许多不同形式的测试。这里我们将考虑单元测试和集成测试。如果您进行单元测试,我希望仅使用模拟,而不与文件交互。所以我假设这是为了某种集成测试。Thisisalin

testing - 我如何在 Go 中查看或测试优雅重启?

我通过gin's提供HTTPhttps://github.com/fvbock/endless.我想看看与基本HTTP服务器的区别。我发送了syscall.SIGUSR1信号:syscall.Kill(getPid(),syscall.SIGUSR1)应用程序没有退出,但我无法检测到重启。我要做的是在toml配置文件更改时为应用程序初始化新配置。我的代码如下:packagemainimport("os""fmt""syscall""github.com/gin-gonic/gin""github.com/fvbock/endless""github.com/BurntSushi/tom

unit-testing - 用于文件创建的表驱动测试

我从@volker那里得到了一个关于表驱动测试的例子,如下所示但目前我想念我应该在真正的测试中放什么,这个测试使用字节,目前我不确定在args和expected[]byte中放什么,例如我想检查文件中是否有2换行然后是application条目,我该怎么做而不需要创建真实文件并解析它?typeModelsstruct{namestringvtypestringcontentTypestring}funcsetFile(fileio.Writer,appStrModels){fmt.Fprint(file,"1.0")fmt.Fprint(file,"Created-By:applica

testing - Go gRPC 服务器使集成测试失败

我最近又开始玩go,我现在的任务是实现一个服务(将运行在k8s上),它应该充当gRPC服务器。根据要求,目前,为了满足k8s上的readinessProbe,我需要为我的服务实现一个健康检查端点,并且应该对其进行测试:我所做的是:funcmain(){server:=startHTTPServer()deferserver.Close()c:=make(chanos.Signal,1)signal.Notify(c,os.Interrupt,syscall.SIGTERM,syscall.SIGINT)我按照thisarticle这样测试的:funcTestMain(m*testing

unit-testing - 数据库连接get的单元测试策略

被测代码中有一个方法,它只是尝试获取数据库连接,如果无法连接则返回错误。它,以及涉及的结构体定义如下:typeDatabaseContextstruct{ContextDatabaseDatabaseSt}////GetInfoReturnsthecontext.//func(c*DatabaseContext)GetInfo()*Context{//return&c.Context//}//GetDBGetsthedatabaseconnectionfromtheconnectionstring.func(c*DatabaseContext)GetDB()(*sql.DB,*erro