猿问

仅运行受最近更改影响的测试

有没有办法只执行那些受 Go 最近更改影响的测试?我们有一个大型单元测试套件,现在开始需要一段时间才能完成。我们认为我们只运行那些受第一遍代码更改影响的测试。

Python有这样的东西: https: //github.com/tarpas/pytest-testmon

Go 有办法做到这一点吗?


回首忆惘然
浏览 113回答 4
4回答

拉风的咖菲猫

go test在 Go 1.10 及更高版本中,会在包级别自动执行此操作;任何没有更改的包将返回缓存的测试结果,而有更改的包将被重新测试。如果单个包的测试仍然花费太长时间,则表明您的测试存在问题;Go 中的良好测试通常执行得非常快,这意味着您可能需要检查测试本身,并执行以下操作的组合:使用构建标签隔离集成测试。访问外部资源的测试往往会比较慢,因此将它们设置为可选将有助于加快您只需要单元测试结果的运行速度。利用简短的测试,以便您可以选择更频繁地进行快速通过。检查您的单元测试 - 您是否有不必要的测试或测试用例?您的测试是否过于复杂?您是否正在阅读可以保存为常量的黄金文件?当您可以通过编程方式创建对象时,是否将静态 JSON 反序列化为对象?优化您的单元测试。测试仍然是代码,性能不佳的代码可以进行性能优化。在单元测试中有很多情况下,我们很乐意选择便利而不是性能,但如果性能是一个问题,则必须重新考虑该选择。检查您的测试执行 - 您是否使用了不可缓存的参数来go test阻止其缓存结果?您是否出于习惯而在不必要的情况下使用竞争检测器、分析器或代码覆盖率报告?

慕姐4208626

不,Go 中没有办法做到这一点。您所能做的就是将代码拆分为多个包并一次测试一个包go test some/thing而不是他们全部go test ./...

扬帆大鱼

他们的 README.md 中的示例是export CMDLINE="go test"export PKGS="./..." # IMPORTANT make sure packages are written SEPERATLYnabaz test --cmdline $CMDLINE --pkgs $PKGS .

慕的地6264312

你可以使用make. 如果测试文件没有更改,它不会再次重新运行测试。make: `test' is up to date.这就是您可以编写Makefile 的方法。# To run commands just use "make" and make function name# ex- <make run> use for run go run main.go# Go parametersexecution: echo "** Executing Makefile**"GOCMD=goGOINSTALL=$(GOCMD) installGOBUILD=$(GOCMD) buildGOCLEAN=$(GOCMD) cleanGOTEST=$(GOCMD) testGOGET=$(GOCMD) getGORUN=$(GOCMD) runBINARY_NAME=reservationsBINARY_UNIX=$(BINARY_NAME)_unixexecute:&nbsp; &nbsp; - echo "Running the build - reservations"&nbsp; &nbsp; - ~/go/bin/reservations-backendinstall:&nbsp; &nbsp; - echo "Building the module"&nbsp; &nbsp; # will create a executable file at $GOPATH&nbsp; &nbsp; - $(GOINSTALL)run:&nbsp; &nbsp; - @echo "Running the application - reservations"&nbsp; &nbsp; - $(GORUN) $(BINARY_NAME)#NOTE: @ before a command will stop showing that command.test:&nbsp; &nbsp; - @echo "** Running Tests **"&nbsp; &nbsp; - $(GOTEST) -race ./test -v
随时随地看视频慕课网APP

相关分类

Go
我要回答