Запуск одного и того же набора тестов для нескольких экземпляров с использованием ruby ​​Unit test

Я хочу запустить набор тестов с двумя разными аргументами при инициализации. что я делаю сейчас:

require 'rubygems'
gem 'test-unit'
require 'test/unit'
require 'calc'

class My_test < Test::Unit::TestCase
  class << self
    def startup
      $obj = Calc.new("test1")
    end
  end

  def test_1
    #testing $obj method 1
  end

  def test_2
    #testing $obj method 2
  end
  .
  .
  .
end

Теперь я хочу выполнить все тесты test_1...test_n с другим аргументом, скажем 'test2', Calc.new("test2").

Каков наилучший способ сделать это? Любое предложение. Я использую gem test-unit 2.5.x

1 ответ

Решение

Вы можете поместить test_1... в модули и создать 2 тестовых класса.

Пример (один тест пройден успешно, второй - с ошибкой):

require 'rubygems'
gem 'test-unit'
require 'test/unit'
#~ require 'calc'

module My_tests
  def test_1
    assert_equal( 2, 2*@@obj)
  end
end

class My_test1 < Test::Unit::TestCase
  class << self
    def startup
      @@obj = 1 #Calc.new("test1")
    end
  end
  include My_tests
end

class My_test2 < Test::Unit::TestCase
  class << self
    def startup
      @@obj = 2 #Calc.new("test1")
    end
  end
  include My_tests
end

Я не использовал глобальную переменную ($obj) но атрибут класса (@@obj).

Возможно, вам лучше использовать setup:

require 'rubygems'
gem 'test-unit'
require 'test/unit'
#~ require 'calc'

module My_tests
  def test_1
    assert_equal( 2, 2*@obj)
  end
end

class My_test1 < Test::Unit::TestCase
  def setup
    @obj = 1 #Calc.new("test1")
  end
  include My_tests
end

class My_test2 < Test::Unit::TestCase
  def setup
    @obj = 2 #Calc.new("test1")
  end
  include My_tests
end
Другие вопросы по тегам