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

问题描述 投票:15回答:2

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

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

ruby unit-testing rspec code-organization testunit
2个回答
10
投票

首先,每个宝石都有一个典型的布局。代码几乎完全在lib中。在根目录中,只有元数据,例如READMEgemspec文件和一些可选的配置数据。如果您使用Rails或Sinatra这样的内容编写网络应用,则会使用其布局标准。

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

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

[如果使用test,则测试(然后称为规格)进入RSpec目录。有关实际测试的布局的上述说明也适用于此。

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


0
投票

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

我还没去谷歌搜索那么长时间,但是我的发现已经比预期的要薄。我发现最有帮助的是rackstash

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

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

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

以前,我一直在避开测试目录中的子目录,而在我的Rakefile或实际上执行测试的任何ruby文件中做类似的事情:

ruby wiki

因此,如果我结合使用这两种技术,则每个目录都将有一个文件,该文件动态地要求该目录进行测试,而父目录的文件又需要该文件。但这似乎挫败了我最初为避免乏味所做的努力。

然后我发现$LOAD_PATH << File.dirname(__FILE__) require 'test/unit' Dir.glob('test/test_*', &method(:require)) 中的some classes听起来很相关,但是文档不足。但是,似乎有ruby-doc可用的更多信息可以轻易错过。我还没有全部阅读,但是看起来很有希望。

© www.soinside.com 2019 - 2024. All rights reserved.