3

我刚刚开始研究一个用 Rspec 编写的超过 20k 单元测试的项目(项目本身不是用 Ruby 编写的;只是测试用例)。随着更多功能的添加,当前的测试用例数量预计将在未来急剧增长。已经发生的事情(在很长一段时间内)是 RSpec 开始成为测试这个项目的一个特别好的解决方案,但是随着项目的发展,他们的 RSpec 测试用例的相当特别的结构已经严重地咬了他们。他们遇到的最大问题之一是他们的测试代码中的分类法——在他们的测试用例中命名他们的测试用例、固定装置、帮助代码等的结构(或缺乏)。

正如你所想象的,在超过 20k 的单元测试中,有很多名称非常相似的方法,使用的辅助方法都是从全局命名空间加载的。

为了突出问题所在的一个领域,这个应用程序中有大约 10 个数据库。检查所有这些数据库的表/列/视图/约束/存储过程/...的结构是现有 RSpec 单元测试中涵盖的内容(相当合理)。但是,这个数据库集合中需要检查的 DDL 实体总数可能 >10000;涵盖整个 DB 结构检查范围能够选择性地仅测试 DB 结构的子集需要:

  • 10000 种不同的方法(我立即排除了该选项!)

  • 测试用例中相当复杂的命名约定(即包含 DB 名称 + 表名称 + 列名称 + ...),
  • 或将数据库名称、表名、列名等传递给通用方法
  • 或者通过命名空间分离关注点(我不知道在 RSpec 中有一种优雅的可扩展方式),
  • 或者一些聪明的元编程(我怀疑最终可能会使已经混乱的结构更加难以遵循)。

据我所知,现在存在的只是上述所有内容,没有很多明显的计划......

您是否有任何提示或参考资料可以让我尝试理顺这种混乱,并为他们的 RSpec 测试提供某种可扩展的结构?特别是,非常欢迎关于如何为非常大的项目构建各种 RSpec 文件的建议。

4

1 回答 1

1

RSpec Book是 RSpec 提示和技巧以及一般 BDD 方法的极好资源(尽管您的重点似乎更多地是关于测试)。有几种方法可以简化和干燥规范以使其更易于管理,包括共享示例(第 12 章)和宏(第 17 章)。

我还推荐David Chelimsky 的博客

看起来你的项目可能是一个真正的挑战。在您提到的方法中,我认为使用带有 DB、表和列作为参数的宏是最有前途的。

于 2010-02-03T06:18:13.793 回答