запуск модульного теста из irb или pry

Есть ли способ запустить тестовый файл из сеанса irb или pry?

Я попробовал load './testfile.rb, но это не запускает тесты в тестовом файле.

Мой тестовый файл выглядит так:

require 'test/unit'
require './sudoku.rb'

class SudokuTest < Test::Unit::TestCase
  def test_initialize
    assert_nothing_raised do
      Sudoku.new(Array.new(9*9))
    end
    assert_nothing_raised do
      Sudoku.new(Array.new(9*9,Field.new(nil)))
    end
  end
end

person FlyingFoX    schedule 19.05.2012    source источник


Ответы (3)


На самом деле тесты не предназначены для такого интерактивного запуска, но если вы заглянете в стандартную библиотеку ruby ​​и посмотрите на файл test/unit.rb, вы увидите, что он устанавливает обработчик at_exit, когда вы require 'test/unit':

at_exit do
  unless $! || Test::Unit.run?
    Kernel.exit Test::Unit::AutoRunner.run
  end
end

Итак, глядя на это, все, что вам нужно сделать в сеансе irb, это вызвать:

Test::Unit::AutoRunner.run

Это запустит все загруженные вами тесты, которые являются подклассами Test::Unit::TestCase.

Если вы просто хотите запустить тестовый файл, не загружая его в сеанс irb, вы можете просто сделать:

system 'ruby testfile.rb'
person Casper    schedule 20.05.2012

Он не запускает тесты, потому что вы этого не просите. Вы просто создаете класс.

Попробуй это:

tests = SudokuTest.new
tests.test_initialize
person Samy Dindane    schedule 19.05.2012
comment
Если я попробую это, я получу: ArgumentError: wrong number of arguments (0 for 1) при вызове SudokuTest.new, и я не могу понять, что он на самом деле хочет в качестве аргумента. - person FlyingFoX; 20.05.2012
comment
Аргументом должен быть метод, который необходимо протестировать: test-unit.rubyforge.org/test-unit/Test/Unit/. Попробуйте просто SudokuTest.new :test_initialize. - person Samy Dindane; 20.05.2012
comment
Использование SudokuTest.new :test_initialize создает объект SudokuTest, но вызов test_initialize дает мне NoMethodError: undefined method 'add_assertion' for nil:NilClass - person FlyingFoX; 20.05.2012

Возможно, вам нужен plymouth. Он может автоматически запустить сеанс Pry в контексте неудачного теста.

person horseyguy    schedule 20.05.2012