是否可以跳过/排除使用go test运行的某些测试?

我有相当多的集成类型测试,它们调用编写为标准围棋测试的睡觉服务,并与go test%一起运行.当开发一个新功能时,能够跳过一些测试有时是很有用的,例如,如果新功能还没有部署到测试服务器上,而我仍然想运行所有现有的测试(除了那些测试新功能的新测试).

我知道大约-run个,但我不想指定所有我想运行的测试,那将是一个很长的列表.同时,我无法编写排除测试的正则表达式.

另一种 Select 是不提交不在同一分支中运行的测试,但是如果我只指定要排除的测试会更容易一些.

推荐答案

就像VonC说的,你可以使用+build个标签

┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ ls
a_test.go  b_test.go  c_test.go

a_test.go :

package tags

import "testing"

func TestA(t *testing.T) {}

b_test.go :

// +build !feature1

package tags

import "testing"

func TestB(t *testing.T) {}

c_test.go :

// +build !feature1
// +build !feature2

package tags

import "testing"

func TestC(t *testing.T) {}

然后使用-tags参数运行测试:

┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v . | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v -tags feature1 . | grep PASS:
--- PASS: TestA (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v -tags feature2 . | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)

//更新:不同的逻辑:

a_test.go:

// +build all

package tags

import "testing"

func TestA(t *testing.T) {}

b_test.go:

// +build all feature1

package tags

import "testing"

func TestB(t *testing.T) {}

c_test.go:

// +build all feature2

package tags

import "testing"

func TestC(t *testing.T) {}


┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v -tags all | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v -tags feature1 | grep PASS:
--- PASS: TestB (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -v -tags="feature1 feature2" | grep PASS:
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)

或者,您可以按名称调用特定的测试,如:

d_test.go:

package tags

import "testing"

func TestA1(t *testing.T) {}
func TestB1(t *testing.T) {}
func TestC1(t *testing.T) {}
func TestD1(t *testing.T) {}

输出:

┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -run="(A|B)1" -v | grep PASS:
--- PASS: TestA1 (0.00 seconds)
--- PASS: TestB1 (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]                                                                                                      
└──➜ go test -run="D1" -v | grep PASS:
--- PASS: TestD1 (0.00 seconds)

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

由于索引器压缩比限制,扫描包含golang包的图像时,伪影XRAY失败

使用一元或服务器流将切片从GRPC服务器返回到客户端

GoFR HTTP服务初始化中Open遥测传输和超时配置的说明

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

Golang String

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

无效操作:v > max(类型参数 T 与 > 不可比较)

一个Go module可以和之前的非module模块发布在同一个路径下吗?

对 CSV 进行单元测试失败

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

设置指向空接口的指针

在恒等函数中将类型 T 转换为类型 U

不能在 *gorm.db 而不是 gorm.db 上使用 WithContext(ctx) 方法

来自洪流公告的奇怪同行字段

go:embed 文件扩展名模式

gorm 获取列名

Golang Echo Labstack 如何在模板视图中调用函数/方法

Go模板中的浮点除法

使用 LoadLibraryA(path_to_dll) 加载 DLL 会将文件描述符 0、1 和 2 的继承句柄标志 (HANDLE_FLAG_INHERIT) 从 1 更改为 0