unit-testing - 如何编写需要大量测试用例的 go 测试

标签 unit-testing testing go

假设我有一个包含大约 210000 个英文单词的列表。

  • 我需要使用所有这 210000 个单词作为测试用例。
  • 我需要确保每次运行测试时都涵盖该列表中的每个词。

问题是:在我的测试中存储这些词的最佳做法是什么?

我应该将所有这些单词保存在一个 slice 中( slice 会不会太大?),还是应该将这些单词保存在一个外部文件中(如 words.txt)并在需要时逐行加载文件?

最佳答案

测试数据通常存储在名为 testdata 的目录中,以将其与其他源代码或数据文件分开(请参阅命令 go help test 中的文档) . go 工具会忽略该目录中的内容。

无论如何,210,000 个单词应该只占用个位数兆字节的 RAM,这并不多。只需要一个辅助函数,在每次测试之前从文件中读取单词(可能缓存它们),或者定义一个 TestMain()读取它们一次并将它们存储在全局变量中以供随后运行的测试访问的函数。

编辑:关于最佳实践,有时将测试数据存储在 testdata 中会更好,即使数据不大。例如,有时我需要在测试用例中使用多个简短的 JSON 片段,并且可能不止一次使用它们。将它们存储在 testdata 子目录下的适当命名的文件中比使用一堆 JSON 片段乱扔 Go 代码更具可读性。

性能的轻微损失在测试中通常不是问题。无论哪种方法使代码更易于理解,都可能是“最佳实践”。

关于unit-testing - 如何编写需要大量测试用例的 go 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52161263/

相关文章:

unit-testing - 是否可以使用类型类将 `ReaderT (IO a) IO a` 更改为 `ReaderT (i a) IO a` ?

unit-testing - 自动化测试感觉很像复制被测试的逻辑,我做对了吗?

javascript - Node.js 文件夹结构 : unit tests and e2e tests

c - 单元测试 C 代码

testing - 在虚拟机中测试您的程序时,您的选择是什么?

go - 在Go工作区中安装Gota软件包

c# - UWP 应用的单元测试无法在 Visual Studio 2015 上运行

java - 如何使用反射从 ArrayList 获取最后一个值?

go - 如何使用 MethodByName 检查实际函数是否存在?

sql - Go 模板用于连接 slice 中的查询