Go 单元测试的包命名策略
Go 中,有多种命名测试包的策略。了解它们的优缺点有助于为您的项目选择最合适的策略。
策略分析
策略 1:
- 文件:github.com/user/myfunc.go(包myfunc)
- 测试文件:github.com/user/myfunc_test.go (package myfunc)
此策略将测试代码与正在测试的代码放在同一个包中。它允许访问非导出标识符,使单元测试能够检查内部变量、函数和方法。但是,将 *_test 附加到测试包可能会导致命名不一致。
策略 2:
- 文件:github.com/user/myfunc.go(包myfunc)
- 测试文件:github.com/user/myfunc_test.go(包myfunc_test)
此策略将测试代码放在单独的包中。它确保测试代码仅访问导出的标识符,从而启用黑盒测试。但是,它限制了对非导出标识符的访问,这对于需要此类访问的单元测试来说可能是一个缺点。
策略 3:
- 文件:github .com/user/myfunc.go(包 myfunc)
- 测试文件: github.com/user/myfunc_test.go (包 myfunc_test,使用 '.' 符号导入 myfunc)
此策略是策略 2 的变体,允许测试代码通过以下方式访问非导出标识符使用“.”导入 myfunc符号。它结合了两种策略的优点,但如果多个包使用“.”,则可能会引入命名空间冲突。
选择哪种策略?
选择取决于测试方法:
-
白盒测试: 使用策略 1(包 myfunc)访问单元的非导出标识符测试。
-
黑盒测试:使用策略 2(包 myfunc_test)确保测试仅依赖于导出的标识符。
-
混合方法:结合策略 1 和 2 来创建用于特定测试目的的不同测试包(例如, myfunc_whitebox_test.go、myfunc_blackbox_test.go)。
以上是单元测试的最佳 Go 包命名策略是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!