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

时间:2011-11-20 15:26:40

标签: ruby unit-testing rspec code-organization testunit

在Java中,您通常会创建两个具有相同包层次结构的源文件夹srctest

在Ruby中你是否只将所有测试放在与被测试类相同的文件夹中?或者您是否在单独的文件夹中创建类似的层次结构?如果是这样,您如何管理单元测试中的require路径?

2 个答案:

答案 0 :(得分:9)

首先,每个宝石都有一个典型的布局。代码几乎完全在lib。在根目录中,只有README,gemspec文件和一些可选配置数据等元数据。如果您使用Rails或Sinatra之类的东西编写Web应用程序,则使用其布局标准

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

如果您使用Test::Unit,则测试位于test目录中。关于如何在该目录中实际组织测试文件没有真正的标准。我个人发现至少部分镜像测试代码的文件布局很有用。如果你慷慨地使用模块/命名空间,那应该使它更具可读性。

如果您使用RSpec,则测试(然后称为规范)将进入spec目录。以上关于实际测试布局的说明也适用于此。

最后,开发人员决定如何设置测试。由于测试是一个任何人都有不同(和字符串)意见的领域,因此没有神圣的成功之路。你应该看看你使用的一些宝石以及它们是如何做的。可以在Rails gems中找到Test :: Unit布局的示例,例如:为ActiveRecord。 RSpec测试的一个示例是ChiliProject的chiliproject_backlogs插件。

答案 1 :(得分:0)

我也是Ruby的新手,并且想知道同样的问题。我没有得到的部分是如何按层次组织它们以匹配lib目录中可能的分层组件,然后将它们全部作为套件运行。

我没有谷歌搜索这么久,但我的发现已经比预期更薄了。我发现的最有用的东西是来自ruby wiki

  

测试用例类可以一起收集到测试套件中,这些测试套件是需要其他测试用例的Ruby文件:

     

#File:ts_allTheTests.rb
     要求'测试/单位'
     要求'testOne'
     要求'testTwo'
     需要'testThree'

     

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

以前,我一直在避免测试目录中的子目录,并在我的Rakefile中执行类似的操作,或者实际执行测试的任何ruby文件:

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

因此,如果我将这两种技术结合起来,我会为每个目录生成一个文件,该文件动态地要求从该目录进行测试,而父目录的文件则需要这些文件。但这似乎打败了我最初的努力,以避免单调乏味。

然后我在some中发现了classes ruby-doc,这听起来很相关,但记录不足。但是,看起来我可以轻易错过Test::Unit的更多信息。我还没有看完它,但看起来很有希望。