草庐IT

test-network

全部标签

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}只

networking - 使用 bufio.NewReader(conn) 阅读整条消息

我正在使用golang开发一个简单的聊天服务器和客户端。我在读取来自net.Conn的消息时遇到了一些问题。到目前为止,这就是我一直在做的:bufio.NewReader(conn).ReadString('\n')由于用户按回车键发送消息,我只需要读到'\n'。但我现在正在研究加密,当在客户端和服务器之间发送公钥时,key有时包含“\n”,这使得很难获得整个key。我只是想知道如何阅读整条消息而不是停在特定字符处。谢谢! 最佳答案 发送二进制数据的一个简单选项是使用长度前缀。将数据大小编码为32位大端整数,然后读取该数据量。//c

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

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

testing - Go Test 总是通过为什么?

我安装了go并在Howtowritegocode上尝试了第一部分一段时间后没有看到预期的结果,我注意到gotest总是通过,总是!我错过了什么?$goversiongoversiongo1$mkdir-psrc/example/math$cat>src/example/math/sum_test.gopackagemath>>import"testing">>funcSumTest(t*testing.T){>t.Errorf("ssss%d",1)>}>.$gotestexample/mathokexample/math0.044s我正在使用windowsx64并且我正在使用git-

testing - 如何从 "main()"测试 "go test"例程?

我想通过编写一些专注于测试整个二进制文件的反回归测试来锁定我的golang程序面向用户的命令行API。测试“二进制整体”意味着go-test应该:能够将STDIN提供给我的二进制文件能够检查我的二进制文件是否生成正确的STDOUT能够确保二进制文件正确处理错误情况但是,我不清楚在go中执行此操作的最佳做​​法是什么?如果有一个好的go测试示例,您能指点我吗?附言过去我一直在使用autotools。我正在寻找类似于AT_CHECK的东西,例如:AT_CHECK([echo"XXX"|my_binary-earg1-farg2],[1],[],[-fand-ecan'tbeusedtoge

networking - Go 中的服务器,重定向到标准输出

我如何在Go中实现一个服务器,将每个输入行发送到标准输出?packagemainimport("io""log""net")funcmain(){srv,err:=net.Listen("tcp",":2000")for{conn,err:=srv.Accept()gofunc(cnet.Conn){//Howtosplitherebylines?c.Close()}(conn)}}运行服务器后./server并运行远程登录telnetlocalhost2000Trying127.0.0.1...Connectedtolocalhost.Escapecharacteris'^]'.te

testing - 如何在 golang 基准测试中正确启动时间和停止时间?

我写了一个基准来测试两个斐波那契数生成器的速度,源代码是hereongithub.funcBenchmarkFib(b*testing.B){fibFuncs:=[]struct{namestringffunc(int)int}{{"recursive",fibRecu},{"iterative",fibIter},}for_,fibFunc:=rangefibFuncs{//calculatek'thFibonaccinumberfork:=10;k事实上,基准测试工作并且输出是nos(master)fibonacci$gotest-bench.goos:linuxgoarch:am

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

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

networking - 如何知道 net.Listener 何时正确关闭?

我有以下代码:server:=&http.Server{Addr:addr,Handler:r}l,err:=net.Listen("tcp",addr)iferr!=nil{logging.Error("Failedopeningsocket:%s",err)}iferr:=server.Serve(l);err!=nil{//errorhandling}当l.Close()被调用时,server.Serve(l)将退出并出错。我想知道这是否真的是一个错误,或者只是有人调用l.Close()的结果(这对我来说不是错误)。有没有正确的方法来做到这一点? 最佳

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

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