【问题标题】:how to write a go test that need massive test case如何编写需要大量测试用例的 go 测试
【发布时间】:2018-09-04 07:44:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 对此没有“正确”或“错误”的答案,但我会将这些单词存储在一个单独的文件中,可能在一个名为 test/ 的目录中。
  • 0.21M 对于切片来说并不多,除非您在微型硬件上运行。如果有疑问:测量。
  • @Flimzy 将文件存储在一个名为 testdata 的文件夹中,该文件夹是专门为这个文件夹保留的 (reference)。
  • @icza:今天我学到了一些新东西……
  • @Volker 是的,你是对的,我认为这样大小的切片并不多

标签: unit-testing testing go


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认为将测试数据放入testdata 的想法很棒,这正是我正在寻找的答案,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-02-06
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多