为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
回首忆惘然 2023-08-07 10:37:59
有没有办法只执行那些受 Go 最近更改影响的测试?我们有一个大型单元测试套件,现在开始需要一段时间才能完成。我们认为我们只运行那些受第一遍代码更改影响的测试。Python有这样的东西: https: //github.com/tarpas/pytest-testmonGo 有办法做到这一点吗?
查看完整描述

4 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

go test在 Go 1.10 及更高版本中,会在包级别自动执行此操作;任何没有更改的包将返回缓存的测试结果,而有更改的包将被重新测试。

如果单个包的测试仍然花费太长时间,则表明您的测试存在问题;Go 中的良好测试通常执行得非常快,这意味着您可能需要检查测试本身,并执行以下操作的组合:

  • 使用构建标签隔离集成测试。访问外部资源的测试往往会比较慢,因此将它们设置为可选将有助于加快您只需要单元测试结果的运行速度。

  • 利用简短的测试,以便您可以选择更频繁地进行快速通过。

  • 检查您的单元测试 - 您是否有不必要的测试或测试用例?您的测试是否过于复杂?您是否正在阅读可以保存为常量的黄金文件?当您可以通过编程方式创建对象时,是否将静态 JSON 反序列化为对象?

  • 优化您的单元测试。测试仍然是代码,性能不佳的代码可以进行性能优化。在单元测试中有很多情况下,我们很乐意选择便利而不是性能,但如果性能是一个问题,则必须重新考虑该选择。

  • 检查您的测试执行 - 您是否使用了不可缓存的参数来go test阻止其缓存结果?您是否出于习惯而在不必要的情况下使用竞争检测器、分析器或代码覆盖率报告?


查看完整回答
反对 回复 2023-08-07
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

不,Go 中没有办法做到这一点。您所能做的就是将代码拆分为多个包并一次测试一个包

go test some/thing

而不是他们全部

go test ./...


查看完整回答
反对 回复 2023-08-07
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

他们的 README.md 中的示例是

export CMDLINE="go test"

export PKGS="./..." # IMPORTANT make sure packages are written SEPERATLY

nabaz test --cmdline $CMDLINE --pkgs $PKGS .


查看完整回答
反对 回复 2023-08-07
?
慕的地6264312

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


查看完整回答
反对 回复 2023-08-07
  • 4 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信