Отображение нескольких тестовых классов в один файл для автотеста - PullRequest
0 голосов
/ 21 декабря 2010

Я использую автономный автотест в своих проектах вместе с 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

Проблема в том, что автотест (насколько я могу судить) знает, какие тесты запускать, основываясь на имени тестовых классов. * У 1011 * будут автоматически запускаться тесты при изменении validation.rb.

Без автотеста я бы назвал указанный выше класс TestL1Validation и создал бы новый класс TestL2Validation, который загрузил другой документ. Однако это нарушает автотест, если только я не разбил свою проверку на l1validation.rb и l2validation.rb.

Как я могу назвать свои файлы или тесты или настроить свои тесты, чтобы автотест запускал несколько тестовых классов при изменении одного исходного файла?

1 Ответ

1 голос
/ 21 декабря 2010

Вы можете добавить пользовательские сопоставления для автотеста. Вот один из способов сделать это: Создайте каталог автотеста на том же уровне, что и каталоги 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 в каталоге test.

...