单元测试 – 在Golang中测试的正确包命名

前端之家收集整理的这篇文章主要介绍了单元测试 – 在Golang中测试的正确包命名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看到Go中的几个不同的测试包命名策略,想知道每个的利弊,我应该使用哪个。

策略1:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc

参见bzip2为例。

策略2:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc_test

import (
    "github.com/user/myfunc"
)

参见wire为例。

策略3:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc_test

import (
    . "myfunc"
)

参见strings为例。

Go标准库似乎使用策略1和2的混合。我应该使用哪三个?这是一个疼痛附加包* _test到我的测试包,因为它意味着我不能测试我的包私有方法,但也许有一个隐藏的优势,我不知道?

您列出的三种策略的根本区别是,测试代码是否与测试下的代码在同一个包中。决定在测试文件中使用软件包myfunc或软件包myfunc_test取决于您是要执行 white-boxblack-box测试。

在项目中使用这两种方法没有什么不妥。例如,你可以有myfunc_whiteBox_test.go和myfunx_blackBox_test.go。

测试代码包比较

>黑盒测试:使用包myfunc_test,这将确保你只使用exported identifiers
>白盒测试:使用包myfunc,以便您可以访问非导出的标识符。适用于需要访问非导出变量,函数方法的单元测试。

问题中列出的策略的比较

>策略1:文件myfunc_test.go使用package myfunc – 在这种情况下,myfunc_test.go中的测试代码将与myfunc.go中测试的代码在同一个包中,在本示例中为myfunc。
>策略2:文件myfunc_test.go使用包myfunc_test – 在这种情况下,myfunc_test.go中的测试代码将被编译为一个单独的包,然后链接和运行与主测试二进制。 [源:test.go代码中的58-59行]>策略3:文件myfunc_test.go使用包myfunc_test,但使用点符号导入myfunc – 这是策略2的变体,但使用点符号导入myfunc。

猜你在找的Go相关文章