组织 Ruby 测试文件夹结构的最佳实践是什么?

20

在Java中,通常会创建两个源代码文件夹srctest,并拥有相同的包层次结构。

在Ruby中,你只需将所有测试文件放在要测试的类所在的同一文件夹中吗?还是要在一个单独的文件夹中创建类似的层次结构?如果是这样,你如何管理单元测试中的require路径?


1
@nash:这是我在SO上读到的第一个粗鲁的评论。 - Marc-André Lafortune
2
抱歉,我刚才说话过分了。我会尽力解决的。例如,你可以在这里看rspec spec文件夹(https://github.com/rspec/rspec-core/tree/master/spec),这些人真的很懂如何编写规范。再次对不起。 - Vasiliy Ermolovich
2个回答

13

起初,每个宝石(gem)都有一个典型的布局。代码几乎完全在 lib 目录下。在根目录中,只有类似于 READMEgemspec 文件和一些可选配置数据的元数据。如果您使用像 Rails 或 Sinatra 这样的东西编写 Web 应用程序,则将使用它们的布局标准。

在所有这些项目类型中,测试可以在相似的位置找到。根据您使用的测试框架不同,有不同的标准。

如果您使用 Test::Unitminitest,则测试通常位于 test 目录中。实际上如何组织该目录中的测试文件没有真正的标准。我个人发现,至少部分地模仿被测试代码的文件布局是有用的。如果您慷慨地使用模块/命名空间,在遵循此设置时,这应该会使测试更加易读。

如果您使用 RSpec,则测试(称为 specs)放在一个 spec 目录中。上面关于实际测试布局的注意事项在这里也适用。

最后,大多数情况下是您自己决定如何设置测试。由于测试是许多人具有不同(且强烈)意见的领域,因此没有通往成功的神圣路径。您应该查看一些您使用的宝石以及它们如何处理事情。例如 minitest 布局的示例可以在 Rails 宝石中找到,例如 ActiveRecord。RSpec 测试的示例是我的rackstash 库。


感谢您的详细回答!我注意到在rspec项目中通常会有一个包含依赖项的spec_helper - Garrett Hall
1
要明确的是,你的 gem 将有 \lib\test 目录。 - ashes999

0

我也是Ruby的新手,对于同样的问题感到困惑。我不明白的部分是如何按层次结构组织它们以匹配lib目录中组件的潜在层次结构,然后将它们全部作为套件运行。

我还没有谷歌太久,但我的发现已经比预期的要少了。我找到的最有用的东西是来自ruby wiki的这个:

测试用例类可以聚集成测试套件,这些测试套件是需要其他测试用例的Ruby文件:

# File: ts_allTheTests.rb
require 'test/unit'
require 'testOne'
require 'testTwo'
require 'testThree'

通过这种方式,相关的测试用例可以自然地分组。此外,测试套件可以包含其他测试套件,允许构建测试层次结构。

以前,我一直避免在我的测试目录中使用子目录,并在我的Rakefile或任何实际执行测试的Ruby文件中执行以下操作:

$LOAD_PATH << File.dirname(__FILE__)
require 'test/unit'
Dir.glob('test/test_*', &method(:require))

所以,如果我将这两种技术结合起来,我将为每个目录创建一个文件,该文件动态地从该目录中要求测试,然后由父目录的文件要求。但是这似乎违背了我最初避免单调乏味的努力。

然后我在ruby-doc中找到了一些 ,听起来很相关,但是文档不足。然而,看起来有更多关于Test::Unit的信息,我可能会轻易错过。我还没有全部阅读,但看起来很有前途。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接