在Java中,通常会创建两个源代码文件夹src
和test
,并拥有相同的包层次结构。
在Ruby中,你只需将所有测试文件放在要测试的类所在的同一文件夹中吗?还是要在一个单独的文件夹中创建类似的层次结构?如果是这样,你如何管理单元测试中的require
路径?
在Java中,通常会创建两个源代码文件夹src
和test
,并拥有相同的包层次结构。
在Ruby中,你只需将所有测试文件放在要测试的类所在的同一文件夹中吗?还是要在一个单独的文件夹中创建类似的层次结构?如果是这样,你如何管理单元测试中的require
路径?
起初,每个宝石(gem)都有一个典型的布局。代码几乎完全在 lib
目录下。在根目录中,只有类似于 README
,gemspec
文件和一些可选配置数据的元数据。如果您使用像 Rails 或 Sinatra 这样的东西编写 Web 应用程序,则将使用它们的布局标准。
在所有这些项目类型中,测试可以在相似的位置找到。根据您使用的测试框架不同,有不同的标准。
如果您使用 Test::Unit
或 minitest,则测试通常位于 test
目录中。实际上如何组织该目录中的测试文件没有真正的标准。我个人发现,至少部分地模仿被测试代码的文件布局是有用的。如果您慷慨地使用模块/命名空间,在遵循此设置时,这应该会使测试更加易读。
如果您使用 RSpec,则测试(称为 specs)放在一个 spec
目录中。上面关于实际测试布局的注意事项在这里也适用。
最后,大多数情况下是您自己决定如何设置测试。由于测试是许多人具有不同(且强烈)意见的领域,因此没有通往成功的神圣路径。您应该查看一些您使用的宝石以及它们如何处理事情。例如 minitest
布局的示例可以在 Rails 宝石中找到,例如 ActiveRecord。RSpec 测试的示例是我的rackstash 库。
spec_helper
。 - Garrett Hall\lib
和 \test
目录。 - ashes999我也是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的信息,我可能会轻易错过。我还没有全部阅读,但看起来很有前途。