4 回答
TA贡献1995条经验 获得超2个赞
go test
在 Go 1.10 及更高版本中,会在包级别自动执行此操作;任何没有更改的包将返回缓存的测试结果,而有更改的包将被重新测试。
如果单个包的测试仍然花费太长时间,则表明您的测试存在问题;Go 中的良好测试通常执行得非常快,这意味着您可能需要检查测试本身,并执行以下操作的组合:
使用构建标签隔离集成测试。访问外部资源的测试往往会比较慢,因此将它们设置为可选将有助于加快您只需要单元测试结果的运行速度。
利用简短的测试,以便您可以选择更频繁地进行快速通过。
检查您的单元测试 - 您是否有不必要的测试或测试用例?您的测试是否过于复杂?您是否正在阅读可以保存为常量的黄金文件?当您可以通过编程方式创建对象时,是否将静态 JSON 反序列化为对象?
优化您的单元测试。测试仍然是代码,性能不佳的代码可以进行性能优化。在单元测试中有很多情况下,我们很乐意选择便利而不是性能,但如果性能是一个问题,则必须重新考虑该选择。
检查您的测试执行 - 您是否使用了不可缓存的参数来
go test
阻止其缓存结果?您是否出于习惯而在不必要的情况下使用竞争检测器、分析器或代码覆盖率报告?
TA贡献1852条经验 获得超7个赞
不,Go 中没有办法做到这一点。您所能做的就是将代码拆分为多个包并一次测试一个包
go test some/thing
而不是他们全部
go test ./...
TA贡献1799条经验 获得超9个赞
他们的 README.md 中的示例是
export CMDLINE="go test"
export PKGS="./..." # IMPORTANT make sure packages are written SEPERATLY
nabaz test --cmdline $CMDLINE --pkgs $PKGS .
TA贡献1817条经验 获得超6个赞
你可以使用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 parameters
execution: echo "** Executing Makefile**"
GOCMD=go
GOINSTALL=$(GOCMD) install
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GORUN=$(GOCMD) run
BINARY_NAME=reservations
BINARY_UNIX=$(BINARY_NAME)_unix
execute:
- echo "Running the build - reservations"
- ~/go/bin/reservations-backend
install:
- echo "Building the module"
# will create a executable file at $GOPATH
- $(GOINSTALL)
run:
- @echo "Running the application - reservations"
- $(GORUN) $(BINARY_NAME)
#NOTE: @ before a command will stop showing that command.
test:
- @echo "** Running Tests **"
- $(GOTEST) -race ./test -v
- 4 回答
- 0 关注
- 112 浏览
添加回答
举报