2010-12-21 55 views
0

我在我的項目中使用standalone 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 

的問題是,自動測試(據我可以告訴)知道哪個測試基於測試類的名稱來運行。當validation.rb更改時,TestValidation將自動運行測試。

沒有自動測試,我會命名上述類TestL1Validation,並創建一個新的類TestL2Validation,它加載了一個不同的文檔。但是,這樣做會中斷自動測試,除非我將驗證分爲l1validation.rbl2validation.rb

如何命名我的文件或測試或設置我的測試,以便在單個源文件更改時自動測試將運行多個測試類?

回答

1

您可以爲自動測試添加自定義映射。這裏有一種方法: 在與lib和測試目錄相同的級別創建自動測試目錄。

添加自動測試/ 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 _ *。rb文件。