Передача параметра / объекта в блок ruby ​​/ тест перед его запуском с помощью TestRunner - PullRequest
3 голосов
/ 12 ноября 2008

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

Пытаясь очистить свой код, я создал отдельный файл, в котором есть класс тестовых случаев. Теперь, прежде чем я смогу выполнить эти тесты, я должен передать классу пару параметров / объектов, прежде чем они смогут быть запущены. Теперь проблема в том, что я не могу найти способ передать параметр / объект в тестовый класс.

Сейчас я думаю сгенерировать файл Yaml и прочитать его в тестовом классе, но для этого временное использование файла "неправильно". Если у кого-то есть более удачное решение, это было бы здорово!

************** Редактировать ************

Пример кода того, что я делаю сейчас:

#!/usr/bin/ruby
require 'test/unit/ui/console/testrunner'
require 'yaml'
require 'TS_SampleTestSuite'

automatingSomething()
importantInfo = getImportantInfo()

File.open('filename.yml', 'w') do |f|
    f.puts importantInfo.to_yaml
end

Test::Unit::UI::Console::TestRunner.run(TS_SampleTestSuite)

Теперь в приведенном выше примере TS_SampleTestSuite нуждается в важной информации, поэтому первый «контрольный пример» - это метод, который просто считывает информацию из файла Yaml filname.yml.

Надеюсь, это прояснит ситуацию.

Ответы [ 2 ]

0 голосов
/ 01 января 2009

Во-первых, я согласен с Кэмероном, этот код определенно не соответствует принципу Ruby, хотя я пока тоже обойдусь без него.

Самый быстрый способ начать работу с этим, особенно если эти данные в значительной степени неизменны (то есть ваши тесты не изменят их в любом случае), это просто назначить значение константы. Поэтому вместо того, чтобы называть вашу переменную importantInfo, вы называете ее IMPORTANT_INFO. Тогда он будет доступен вам в ваших тестах. Это определенно не очень хорошее решение, и я думаю, что это даже можно считать тестовым запахом, что вам нужна такая глобальная настройка, но она для вас.

В качестве альтернативы, вы можете посмотреть на заглушку importantInfo, которая, на мой взгляд, обеспечит более чистые и читаемые тесты.

0 голосов
/ 14 ноября 2008

В целом, похоже, что вы не используете юнит-тесты очень рубиново, но я оставлю это в стороне на минуту.

Ваша основная проблема в том, что у вас есть некоторые настройки, которые должны произойти до запуска тестов. Обычный способ сделать это с помощью метода настройки в самом тестовом случае.

class UserTest < TestUnit::TestCase

  def setup
    # do your important calculation
  end

  def test_success
    #.. assert some things
  end
end

Я бы немного подумал о том, что это за код, который вы на самом деле тестируете здесь, и посмотрите, сможете ли вы разбить его и протестировать более детально, с большим количеством тестов.

...