Я пытаюсь использовать flexmock с тест/блок для создания макетов для моих модульных тестов. Это мой класс под тестом:Ед. Изм. С использованием flexmock не сработает, как ожидалось
class Cave
def hunt
# not yet implemented
end
end
Это мой блок тест (обратите внимание, что этот метод является лишь одним из многих методов в тестовом случае):
require 'test/unit'
require 'flexmock/test_unit'
require 'cave'
def test_play
hunter = flexmock()
cave = Cave.new
cave.hunter = hunter
hunter.should_receive(:turn).with(FlexMock.any).at_least.once
cave.hunt
end
Этот тест предполагается проверить, что метод hunt
отправляет сообщение turn
объекту, присвоенному атрибуту cave
, по меньшей мере один раз.
Если я правильно понимаю документацию, flexmock связывается с модульной схемой тестирования и автоматически проверяет ожидания, определенные в тестах. Поэтому я ожидал, что вышеуказанный тест не сработает, поскольку метод hunt
еще не отправляет turn
. Однако тест преуспевает.
Я что-то упустил?
Обновление: Я создал новый файл, содержащий только один минимальный тест, чтобы увидеть, будет ли flex mock работать вообще, как ожидалось. Следующий тест дает ожидаемый результат, то есть не удается:
require 'test/unit'
require 'flexmock/test_unit'
class TestFoo < Test::Unit::TestCase
def test_foo
m=flexmock()
m.should_receive(:bar).and_return(17).once
end
end
Я считаю, что вы правы - в другом случае это работает. Я не знаю, в чем разница, но не стоит пытаться это выяснить, так как я все равно переключусь на rspec. Спасибо! – waldrumpus
Я переключаюсь с flexmock на [rr] (https://github.com/rr/rr/), когда flexmock [не запускался внутри minitest] (https://github.com/jimweirich/flexmock/issues/14) , – zhon