2013-03-06 4 views
0

Я пытаюсь использовать 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 

ответ

0

я думаю, что есть что-то не так с вашей установкой!

после документации и ваш пример, я получаю следующий результат:

ruby test_foo.rb 
Run options: 

# Running tests: 

[1/1] TestFoo#test_foo = 0.00 s 
    1) Failure: 
test_foo(TestFoo) [/Users/paule/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/flexmock-1.3.1/lib/flexmock/test_unit_integration.rb:53]: 
in mock 'unknown': Method 'bar(*args)' called incorrect number of times 
1 matching call expected 
0 matching calls found 
No messages have been received 


Finished tests in 0.011163s, 89.5817 tests/s, 0.0000 assertions/s. 
1 tests, 0 assertions, 1 failures, 0 errors, 0 skips 

ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1] 

это указывает, что все работает нормально, используя рубиновый 2.0.0p0.

+0

Я считаю, что вы правы - в другом случае это работает. Я не знаю, в чем разница, но не стоит пытаться это выяснить, так как я все равно переключусь на rspec. Спасибо! – waldrumpus

+0

Я переключаюсь с flexmock на [rr] (https://github.com/rr/rr/), когда flexmock [не запускался внутри minitest] (https://github.com/jimweirich/flexmock/issues/14) , – zhon