0

我在我的项目中使用独立的 autotest以及minitest。在我的一个项目中,我有一个文件 ( validation.rb) 可将文档验证为不同的内部格式级别。(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

问题是自动测试(据我所知)根据测试类的名称知道要运行哪些测试。TestValidation更改时将自动运行其测试validation.rb

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

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

4

1 回答 1

1

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

添加自动测试/discover.rb:

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

添加自动测试/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 目录中的所有 test_*.rb 文件。

于 2010-12-21T10:39:54.610 回答