Код поблочного тестирования, который получает текущее время

Вы, похоже, не используете определяемую вами переменную value, но вы можете преобразовать строку, назначенную для key, в вывод, который вы предоставили, используя split и each_slice:

array_of_values = key.split("\n")
# => ["John Clark", "Dallas", ... ]

groups_of_seven = array_of_values.each_slice(7)
# => #<Enumerator: ["John Clark", "Dallas", ...]

groups_of_seven.first
# => ["John Clark", "Dallas", "System Engineer", "Global Edge", "Wage 2", "Y", "1"]
5
задан 4 revs 23 May 2017 в 10:32
поделиться

5 ответов

Насмешка Time.now или Date.today кажется достаточно простой, посмотрел бы что-то как:

require 'rubygems'
require 'test/unit'
require 'mocha'

class MyClass

  def foo
    Time.now
  end

end

class MyTest < Test::Unit::TestCase

  def test_foo
    assert true
    t = Time.now
    Time.expects(:now).returns(t)
    assert_equal t, MyClass.new.foo
  end

end
3
ответ дан 18 December 2019 в 12:02
поделиться

Следующее от Мыслей Поля Сойки. Это позволяет Вам переопределять Time.now на время блока.

require 'time'

class Time
  def self.metaclass
    class << self; self; end
  end

  def self.is(point_in_time)
    new_time = case point_in_time
      when String then Time.parse(point_in_time)
      when Time then point_in_time
      else raise ArgumentError.new("argument should be a string or time instance")
    end
    class << self
      alias old_now now
    end
    metaclass.class_eval do
      define_method :now do
        new_time
      end
    end
    yield
    class << self
      alias now old_now
      undef old_now
    end
  end
end

Time.is(Time.now) do
  Time.now # => Tue Nov 13 19:31:46 -0500 2007
  sleep 2
  Time.now # => Tue Nov 13 19:31:46 -0500 2007
end

Time.is("10/05/2006") do
  Time.now # => Thu Oct 05 00:00:00 -0400 2006
  sleep 2
  Time.now # => Thu Oct 05 00:00:00 -0400 2006
end
6
ответ дан 18 December 2019 в 12:02
поделиться

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

3
ответ дан 18 December 2019 в 12:02
поделиться

Сразу же вершина моей головы, я предположил бы, что лучший подход к этому не должен будет позволять Вашему объекту получить само время. Другими словами, передайте дату/время в любой метод, называется на объекте, это использует встроенные конструкции времени в настоящее время. Это могло, в зависимости от Ваших обстоятельств, быть большим простым решением, чем копирование Date.today и Time.now, как Вы предполагаете.

Править: Я говорю это в резком контрасте к предложению наличия интерфейса ITimeProvider, что Вы передаете в как зависимость... это - просто излишество, по-моему.

3
ответ дан 18 December 2019 в 12:02
поделиться

При создании объекта ITimeProvider, поскольку зависимость лучше, чем передача времени в том, потому что это соответствует, не Повторяют Себя принцип.

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

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: