2010-12-21 9 views
0

minitestと一緒に私のプロジェクトにstandalone autotestを使用しています。私のプロジェクトの1つでは、文書をさまざまな内部形式レベルで検証する1つのファイル(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.rbl2validation.rbに打ち切っていない限り、これを行うことは自動テストを中断させます。

1つのソースファイルが変更されたときに自動テストで複数のテストクラスが実行されるように、ファイルやテストの名前を付けたり、テストを設定するにはどうすればよいですか?

答えて

1

自動テストのカスタムマッピングを追加できます。これを行う1つの方法は次のとおりです。 libディレクトリとtestディレクトリと同じレベルに自動テストディレクトリを作成します。

は、自動テスト/ 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ファイルを実行します。

関連する問題