有点像golang初学者,但我以前使用过测试框架。如何在不注入(inject)依赖项的情况下模拟和伪造依赖方法返回的内容?我不想使用依赖注入(inject)的原因是因为有很多外部包方法正在使用,并且在构造函数中注入(inject)所有方法很笨拙。我已经搜索了这个在线/stackoverflow,解决方案是始终使用依赖注入(inject)。有时这不是一个可行的选择。这是我在代码方面尝试做的事情:b/b_test.gopackagebfuncTestResults(t*testing.T){t.Run("Test",func(t*testing.T){b:=NewB()//HowdoImo
这个问题:Howtotestos.exitscenariosinGo(以及其中投票最高的答案)阐述了如何在go中测试os.Exit()场景。由于os.Exit()不容易被拦截,所以使用的方法是重新调用二进制文件并检查退出值。此方法在slide23onthispresentation中进行了描述。作者:AndrewGerrand(围棋团队的核心成员之一);代码很简单,全文转载如下。相关的测试和主文件看起来像这样(注意这对文件单独是一个MVCE):packagefooimport("os""os/exec""testing")funcTestCrasher(t*testing.T){ifo
我在src/下的子目录下有多个包,使用gotest为每个包运行测试工作正常。当尝试使用gotest./...运行所有测试时,测试正在运行但失败了..测试针对本地数据库服务器运行,每个测试文件都有带有db指针的全局变量。我尝试使用-parallel1运行测试以防止数据库中的争用,但测试仍然失败。这可能是什么问题?编辑:某些测试因缺少数据库条目而失败,我在每次测试之前和之后完全清除了数据库。我能想到为什么会发生这种情况的唯一原因是因为测试之间存在一些争用。编辑2:我的每个测试文件都有2个全局变量(使用mgo):varsession*mgo.Sessionvardb*mgo.Database
我习惯于试驾我的代码。现在我是Go的新手,我正试图尽快把它弄好。我正在使用标准库中的测试包,这似乎已经足够好了。(我也喜欢它不是另一个外部依赖项。与任何Java或Ruby项目相比,我们目前总共有2个依赖项......)无论如何-它看起来像golang中的断言看起来像这样:funcTestSomething(t*testing.T){something:=falseifsomething{t.Log("Ohnoes-somethingisfalse")t.Fail()}}我觉得这很冗长,并想改为一行:Assert(something,"Ohnoes-somethingisfalse")或
我的项目文件夹包含:MakefileREADME.mdcomponent/driver/service/vendor/worker/我想在所有测试文件上运行gotest,例如foobar_test.go文件,除了vendor包中的测试文件。我最接近成功的是gotest./...但其中包括vendor测试文件。我在文档中看到您可以将正则表达式传递给-run选项,但我无法使其正常工作。例如我尝试了gotest./*,但我得到一堆can'tloadpackageerrors。最好的方法是什么? 最佳答案 -run模式只匹配测试标识符(而不
我正在使用“测试”包。像下面这样运行我的测试。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,还是别的什么?
当我运行“gotest”时,我想使用不同的配置文件。我如何在我的代码中知道我是在测试上下文还是正常上下文中运行?是否需要检查某种环境变量? 最佳答案 测试包在加载时会修改全局环境:它注册了很多命令行标志。因此,我们可以检查这些标志是否已注册:funcinit(){ifflag.Lookup("test.v")==nil{fmt.Println("normalrun")}else{fmt.Println("runundergotest")}} 关于unit-testing-我怎么知道我在"