Вы, похоже, не используете определяемую вами переменную 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"]
Насмешка 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
Следующее от Мыслей Поля Сойки. Это позволяет Вам переопределять 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
Передайте ITimeProvider (например), класс к Вашей стандартной программе для использования для получения времени, затем можно дразнить его и использовать фиктивный объект, чтобы всегда дать Вам последовательное время для стандартной программы для использования.
Сразу же вершина моей головы, я предположил бы, что лучший подход к этому не должен будет позволять Вашему объекту получить само время. Другими словами, передайте дату/время в любой метод, называется на объекте, это использует встроенные конструкции времени в настоящее время. Это могло, в зависимости от Ваших обстоятельств, быть большим простым решением, чем копирование Date.today и Time.now, как Вы предполагаете.
Править: Я говорю это в резком контрасте к предложению наличия интерфейса ITimeProvider, что Вы передаете в как зависимость... это - просто излишество, по-моему.
При создании объекта ITimeProvider, поскольку зависимость лучше, чем передача времени в том, потому что это соответствует, не Повторяют Себя принцип.
Где-нибудь в Вашем производственном коде, что-то должно получить текущее время. Вы могли взять код поколения даты вне границ Вашего тестового покрытия, или у Вас может быть единственный легко тестируемый объект, который еще может быть везде.