回答

收藏

使用 go test 跳过一些测试

技术问答 技术问答 392 人阅读 | 0 人回复 | 2023-09-12

是否可以跳过/排除一些正在运行的测试go test?
* Q5 e1 I3 h( k, q我有相当多的集成测试,它们被调用为标准 go 测试编写的休息服务,并使用go test. 在开发新功能时,有时跳过一些测试是有用的。例如,如果新功能没有部署在测试服务器上,我仍然想运行所有现有的测试(除了新测试)新功能)。
- i# r% D* `( ^7 G, T+ Q我知道-run,但我不想指定我想运行的所有测试,这将是一个很长的列表。同时,我不能编写正则表达式来排除测试。) f/ ?2 ^1 p; o* k# p2 W- _
另一种选择是不提交不在同一分支运行的测试,但更容易指定要排除的内容。
+ A- g  @, W+ E                                                               
: X# C$ n( e. a3 F: n    解决方案:                                                               
% H/ E: I* a5 j) Y" F: L# g                                                                build标签
( ]1 J% L7 b% O
    ┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? lsa_test.go  b_test.go  c_test.go
    ) W* m# m% S+ F4 W; X
a_test.go :
- E1 f( c6 S% K
    package tagsimport "testing"func TestA(t *testing.T) {}! S, @* ?- @  o8 C9 a( F5 L: s
b_test.go :- J0 o( P' b) G2 L& b
    //  build !feature1package tagsimport "testing"func TestB(t *testing.T) {}
    % F/ W5 w% |* m, y) R
c_test.go :! }' g7 I' k  g
    //  build !feature1//  build !feature2package tagsimport "testing"func TestC(t *testing.T) {}( p2 r/ X0 K- F0 V/ i! {
然后使用-tags参数运行测试:, u8 U, h# z1 @% V
    ┌─ 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)# p% I: i" h# [" c. d3 v
// 更新:不同逻辑:3 B; n) U6 q3 g2 ]7 L( X
a_test.go:; Y9 R' ?, |8 h- ~/ }/ X0 U! b5 p+ W
    //  build allpackage tagsimport "testing"func TestA(t *testing.T) {}
      n+ X4 v! ?- r& D6 {7 d
b_test.go:6 y! E: h% O. z# s* V- b) x- E9 E" T
    //  build all feature1package tagsimport "testing"func TestB(t *testing.T) {}: j7 b, s; x8 M& ]! j5 H9 e( M
c_test.go:
9 C2 n, q/ y$ v
    //  build all feature2package tagsimport "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)! \# U7 A+ G2 q, a  H, T7 k( S
或者您根据名称调用特定测试,例如:
" v$ H+ I  x& t6 F7 y, B- ^d_test.go:) d6 C9 k  V5 ^% a4 m2 Z+ v2 ~. A' {
    package tagsimport "testing"func TestA1(t *testing.T) {}func TestB1(t *testing.T) {}func TestC1(t *testing.T) {}func TestD1(t *testing.T) {}3 D) e- e/ t1 I1 ]* d
输出:) {0 Z! ~# X" I/ O5 H* m9 X5 n
    ┌─ 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)
    6 N0 m' M: L2 n( y# }2 N
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则