我正在使用“测试”包。像下面这样运行我的测试。funcTestMain(m*testing.M){...//Setupos.Exit(m.Run())//Teardown}这将在运行任何测试之前运行设置,并在所有测试完成后进行拆卸。我确实需要这个,因为设置会设置数据库。而且,我需要,但还没有找到一种方法来运行每个测试设置/拆卸。对于我正在运行的单元测试,我想在每次测试之前清除DB,这样DB的内容就不会出现导致意外行为的问题。 最佳答案 UpdateforGo1.14(2020年第一季度)testing包现在支持清理函数,在测试或基准
有没有办法在go"tests"中获取命令行参数,当你调用gotest显然你的main没有运行,所以有没有办法处理命令行参数,一种方法是使用flags包并检查每个测试或正在测试的函数中的命令行参数,但这并不理想,因为您需要大量执行此操作的地方,不像你在运行应用程序时在main中的方式。有人可能会认为这样做是错误的,并且违反了单元测试的纯洁性:并非所有测试都是单元测试不依赖“ENV”变量并在命令行中实际将这些东西作为参数传递是非常实用的,作为记录,我最终将init()函数放在我的一个_test文件中,并设置在调用main时通过标志设置的变量这边走。 最佳答案
说,我有以下代码打印一些日志消息。我将如何测试是否记录了正确的消息?当log.Fatal调用os.Exit(1)测试失败。packagemainimport("log")funchello(){log.Print("Hello!")}funcgoodbye(){log.Fatal("Goodbye!")}funcinit(){log.SetFlags(0)}funcmain(){hello()goodbye()}以下是假设测试:packagemainimport("bytes""log""testing")funcTestHello(t*testing.T){varbufbytes.B
我目前正在考虑为Go中的net.Conn接口(interface)以及在该功能之上构建的其他函数创建一些单元测试,我想知道在Go中进行单元测试的最佳方法是什么谷歌去?我的代码如下:conn,_:=net.Dial("tcp","127.0.0.1:8080")...fmt.Fprintf(conn,"test")...buffer:=make([]byte,100)conn.Read(buffer)测试此代码和使用这些函数启动单独的goroutine以像服务器一样运行的代码是最有效的方法,使用net.http.httptestpackage,还是别的什么?
filepath.Walk函数采用函数回调。这是没有上下文指针的直接函数。当然,Walk的一个主要用例是遍历一个目录并基于它采取一些行动,并引用更广泛的上下文(例如,将每个文件输入到一个表中)。如果我在C#中编写此代码,我将使用一个对象(具有可以指向上下文中的对象的字段)作为回调(具有给定的回调方法),以便对象可以封装Walk调用自。(编辑:用户“usr”表明闭包方法也出现在C#中)如果我在C中编写此代码,我会要求一个函数和一个上下文指针作为void*,因此该函数有一个上下文指针,它可以传递到Walk函数并将其传递给回调函数。但Go只有函数参数,没有明显的上下文指针参数。(如果我设计了
当我运行“gotest”时,我想使用不同的配置文件。我如何在我的代码中知道我是在测试上下文还是正常上下文中运行?是否需要检查某种环境变量? 最佳答案 测试包在加载时会修改全局环境:它注册了很多命令行标志。因此,我们可以检查这些标志是否已注册:funcinit(){ifflag.Lookup("test.v")==nil{fmt.Println("normalrun")}else{fmt.Println("runundergotest")}} 关于unit-testing-我怎么知道我在"
gotest-timeout99999抛出这个无意义的错误invalidvalue"99999"forflag-test.timeout:time:missingunitinduration99999这是一个错误吗?我在用着去版本go1.3“帮助”cli也无用。它说-test.timeout=0:如果是肯定的,则为所有测试设置一个聚合时间限制。但是如果你去test-test.timeout99999你会得到同样的错误-test.timeout=0:ifpositive,setsanaggregatetimelimitforalltests 最佳答案
我想测试我的主包中包含的一些函数,但我的测试似乎无法访问这些函数。我的示例main.go文件如下所示:packagemainimport("log")funcmain(){log.Printf(foo())}funcfoo()string{return"Foo"}我的main_test.go文件看起来像:packagemainimport("testing")funcFoo(ttesting.T){t.Error(foo())}当我运行gotestmain_test.go我得到#command-line-arguments.\main_test.go:8:undefined:fooFA
在我的Go包中有几个基准文件,例如map1_benchmark_test.go和map2_benchmark_test.go。在每个*_benchmark_test.go文件中,都有多个基准函数,例如funcBenchmarkMapTravel(b*testing.B)和funcBenchmarkMapGet(b*testing.B).问题是,我怎样才能只测试一个基准函数?我尝试阅读一些手册,但运行gohelptest对基准测试一无所知。 最佳答案 Descriptionoftestingflags-test.benchpatter
当终端/控制台测试运行实际以红色或绿色文本显示其输出时,我喜欢它。似乎很多可用于Go的测试库都有这个。但是,我只想使用Go附带的默认测试包。有没有办法用红色和绿色对其输出进行着色? 最佳答案 您可以使用grc,一种通用的着色剂,可以为任何东西着色。在Debian/Ubuntu上,使用apt-getinstallgrc安装。在Mac上,brewinstallgrc.在你的主目录中创建一个配置目录:mkdir~/.grc然后在~/.grc/grc.conf中创建您的个人grc配置:#Go\bgo.*test\bconf.gotest然后