класс Minitest::Mock
Простая и чистая система создания эмуляторов объектов.
Все эмуляторы объектов являются экземплярами Mock
Публичные методы экземпляра
Исходный код
# File lib/minitest/mock.rb, line 96
def expect name, retval, args = [], **kwargs, &blk
name = name.to_sym
if blk then
raise ArgumentError, "args ignored when block given" unless args.empty?
raise ArgumentError, "kwargs ignored when block given" unless kwargs.empty?
@expected_calls[name] << { :retval => retval, :block => blk }
else
raise ArgumentError, "args must be an array" unless Array === args
if ENV["MT_KWARGS_HAC\K"] && (Hash === args.last ||
Hash == args.last) then
if kwargs.empty? then
kwargs = args.pop
else
unless @@KW_WARNED then
from = caller(1..1).first
warn "Using MT_KWARGS_HAC\K yet passing kwargs. From #{from}"
@@KW_WARNED = true
end
end
end
@expected_calls[name] <<
{ :retval => retval, :args => args, :kwargs => kwargs }
end
self
end Ожидается, что метод name будет вызван, необязательно с args (и kwargs или blk), и возвращает retval.
@mock.expect(:meaning_of_life, 42) @mock.meaning_of_life # => 42 @mock.expect(:do_something_with, true, [some_obj, true]) @mock.do_something_with(some_obj, true) # => true @mock.expect(:do_something_else, true) do |a1, a2| a1 == "buggs" && a2 == :bunny end
args сравнивается с ожидаемыми аргументами с использованием оператора равенства (т. е. оператора ‘===’), что позволяет ожидать менее специфические результаты.
@mock.expect(:uses_any_string, true, [String])
@mock.uses_any_string("foo") # => true
@mock.verify # => true
@mock.expect(:uses_one_string, true, ["foo"])
@mock.uses_one_string("bar") # => raises MockExpectationError
Если метод будет вызываться несколько раз, укажите новое ожидание для каждого вызова. Они будут использоваться в том порядке, в котором вы их определяете.
@mock.expect(:ordinal_increment, 'first') @mock.expect(:ordinal_increment, 'second') @mock.ordinal_increment # => 'first' @mock.ordinal_increment # => 'second' @mock.ordinal_increment # => raises MockExpectationError "No more expects available for :ordinal_increment"
Исходный код
# File lib/minitest/mock.rb, line 145
def verify
@expected_calls.each do |name, expected|
actual = @actual_calls.fetch name, nil # defaults to []
raise MockExpectationError, "Expected #{__call name, expected[0]}" unless actual
raise MockExpectationError, "Expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if
actual.size < expected.size
end
true
end Проверяет, что все методы были вызваны как ожидалось. Выбрасывает MockExpectationError , если эмулятор объекта не был вызван как ожидалось.
© Ryan Davis, seattle.rb
Licensed under the MIT License.
https://docs.seattlerb.org/minitest/Minitest/Mock.html