【问题标题】:What is the best practice for organizing Ruby test folder structure?组织 Ruby 测试文件夹结构的最佳实践是什么?
【发布时间】:2011-11-20 15:26:39
【问题描述】:

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

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

【问题讨论】:

  • @nash:这是我在 SO 上读到的第一条评论,我觉得这很粗鲁。
  • 对不起,这真的很粗鲁。我会试着弄清楚。例如,您可以在此处查看 rspec spec 文件夹(github.com/rspec/rspec-core/tree/master/spec) 这些家伙真的知道如何编写规范。再次抱歉。

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


【解决方案1】:

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

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

如果您使用Test::Unitminitest,测试通常位于test 目录中。关于如何实际组织该目录中的测试文件没有真正的标准。我个人发现至少部分反映测试代码的文件布局很有用。如果您大量使用模块/命名空间,那么在您的测试中也遵循此设置时,这应该会使其更具可读性。

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

最后,如何设置测试主要由您自己决定。由于测试是许多人有不同(和强烈)意见的领域,因此没有通往成功的神圣之路。你应该看看你使用的一些宝石以及它们是如何工作的。 minitest 布局的示例可以在 Rails gems 中找到,例如为ActiveRecord。 RSpec 测试的一个例子是我的rackstash 库。

【讨论】:

  • 感谢您的详尽回答!我注意到在 rspec 项目中经常有一个 spec_helper 包含依赖项。
  • 明确地说,您的 gem 将有 \lib\test 目录。
【解决方案2】:

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

我在谷歌上搜索的时间不长,但我的发现已经比预期的要少。我发现的最有用的东西是来自ruby wiki

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

# 文件:ts_allTheTests.rb
需要“测试/单元”
需要'testOne'
需要'testTwo'
需要'testThree'

这样,相关的测试用例就可以很自然的分组了。此外,测试套件可以包含其他测试套件,从而允许构建测试层次结构。

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

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

因此,如果我将这两种技术结合起来,我将为每个目录创建一个文件,该文件动态地需要该目录中的测试,而父目录的文件又需要该文件。但这似乎挫败了我最初避免乏味的努力。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2012-01-08
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2017-04-21
    • 2012-05-08
    相关资源
    最近更新 更多