0

プロジェクトで minitest とともにスタンドアロンのautotestを使用しています。私のプロジェクトの 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

問題は、autotest が (私が知る限り) テスト クラスの名前に基づいて実行するテストを認識していることです。TestValidationが変更されると、そのテストが自動的に実行validation.rbされます。

自動テストがなければ、上記のクラスに名前を付けて、別のドキュメントをロードするTestL1Validation新しいクラスを作成したでしょう。ただし、これを行うと、検証をandTestL2Validationに分割しない限り、自動テストが中断されます。l1validation.rbl2validation.rb

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

4

1 に答える 1

1

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

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ファイルを再実行してください。

于 2010-12-21T10:39:54.610 に答える