回答

收藏

在 Go 中分离单元测试和集成测试

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

在 GoLang (testify) 中分离单元测试和集成测试是否有既定的最佳实践?我混合了单元测试(不依赖任何外部资源,所以运行速度非常快)和集成测试(依赖任何外部资源,所以运行速度很慢)。所以,当我说的时候go test.+ f* _  G9 @# J" ~$ H) U  v
最直接的技术似乎是 main 中定义一个 -integrate 标志:3 w2 G# |: S* l! u! q3 M
    var runIntegrationTests = flag.Bool("integration",false    ,"Run the integration tests (in addition to the unit tests)")
    " @2 U, R, _, F& Q6 h& o
然后在每个集成测试的顶部添加一个 if 语句:
5 r% _" `# f! D/ E7 b
    if !*runIntegrationTests    this.T().Skip("To run this test,use: go test -integration")}
    , [/ ~5 Z& E+ M; P3 F$ G7 Z1 j
这是我能做的最好的吗?我搜索了 testify 文档,看看是否有命名协议或某些东西可以为我实现这一点,但没有找到任何东西。我错过了什么吗?3 o4 H( w8 a; ~" B. Z$ x; s' G
                                                                & p, E7 b0 r4 H, j% n
    解决方案:                                                               
1 ], k: J. M) }! {  U                                                                编写一个integration_test.go,并给它一个集成的建筑标签。定义(全局)标志,如服务地址和连接字符串,并在您的测试中使用它们。
3 q0 C: d+ Z. E3 i7 _  L```golang  ]5 l9 S( V6 S: S
//  build integration$ l2 G5 V# _( d. \9 P
var fooAddr = flag.String(…)
. X4 q; |/ A5 O5 \6 ]func TestToo(t testing.T) {7 J4 w. B% X  v$ ]4 w; e4 z1 N
                f,err := foo.Connect(fooAddr)* z/ m) I- D0 a+ ^9 N+ F% b- B
                // …7 N9 b2 K+ y& D% Y
}: n9 J9 t/ A; H( h' F5 r; {5 A
```
% x4 v) M3 V7 q1 z' xgo test 像 go build 用同样的建筑标签,可以调用go test -tags=integration.  它还合成了调用 flag.Parse 的包 main,因此任何声明和可见的标志都将被处理并可用于您的测试。0 d; [1 r; I4 o; A& C
作为类似的选项,您还可以使用默认操作集成测试//  build !unit,然后通过操作go test -tags=unit.
* _4 j/ t2 y- O1 }4 ^  y@adamc 评论:
7 J' a; L+ P6 s4 X对于任何尝试使用建筑标志的人来说,重要的是//  build test注释是文件中的第一行,注释后包含空行,否则应该-tags命令将忽略指令。
7 |' `) c+ `& V, s另外,建筑注释中使用的标记不得有折号,但允许使用下划线。例如,//  build unit-tests而///   build unit_tests会。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则