将多个测试类映射到同一个文件以进行自动测试

时间:2010-12-21 00:09:11

标签: ruby unit-testing autotest

我在项目中使用standalone autotest以及minitest。在我的一个项目中,我有一个文件(validation.rb),可以将文档验证为不同的内部格式级别。 (Level 2文档比1级文档具有更多功能。)

测试特定级别的验证需要重复加载已知有效文档,以破坏方式巧妙地改变它,然后确保它被破坏。简而言之:

class TestValidation < MiniTest::Unit::TestCase
  def setup
    @l1 = Document.load( L1DOC )
  end
  def test_valid
    assert @l1.valid_level_1?
  end
  def test_unbalanced_data
    @l1.instance_eval{ @tracks[0].data.pop }
    refute @l1.valid_level_1?, "Validation must ensure that all tracks have the same amount of data"
  end
  # many more tests for level 1 here
end

问题是autotest(据我所知)根据测试类的名称知道要运行哪些测试。 <{1}}将在TestValidation更改后自动运行。

如果没有自动测试,我会将上面的类命名为validation.rb,并创建一个新的类TestL1Validation来加载不同的文档。但是,这样做会打破自动测试,除非我将验证分为TestL2Validationl1validation.rb

如何命名我的文件或测试,或设置我的测试,以便当单个源文件发生更改时,自动测试将运行多个测试类?

1 个答案:

答案 0 :(得分:1)

您可以为自动测试添加自定义映射。这是一种方法: 在与lib和测试目录相同的级别创建自动测试目录。

添加autotest / discover.rb:

$LOAD_PATH.unshift File.expand_path('../', File.dirname(__FILE__))
Autotest.add_discovery { "my_rules" }

添加autotest / my_rules.rb:

require 'autotest'

class Autotest::My_rules < Autotest
  def initialize
    super

    add_mapping(%r%^lib/valid.rb$%, true) { |filename, _|
      files_matching %r%^test/test_.*\.rb$%
    }
  end
end

这将添加自定义映射:每当lib / valid.rb文件发生更改时,请重新运行测试目录中的所有test _ * .rb文件。