2012-07-13 20 views
0

如果之前詢問過,請道歉。Ruby:使用Flexmock模擬文件寫入

一個簡單的類:使用

class AskSO 

    def initialize(filehandle) 
    @filehandle = filehandle 
    end 

    def library_start 
    @filehandle << '<plist version="1.0">' 
    end 
end 

一個簡單的單元測試的Flex模擬

require 'rubygems' 
require 'flexmock/test_unit' 
require 'AskSO' 
require 'test/unit' 

class AskSOTest < Test::Unit::TestCase 

    def setup 
    @filehandle = flexmock("filehandle", "<<" => "") 
    end 

    def test_library_start 
    @filehandle.should_receive("<<").with('<plist version="1.0">').once 
    @AskSOInstance = AskSO.new(@filehandle) 
    @AskSOInstance.library_start 
    end 
end 

當我與ruby AskSO-test.rb運行它,我得到

1) Failure: 
test_library_start(AskSOTest) 
    [/Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/validators.rb:40:in `validate' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation.rb:123:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation.rb:122:in `each' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation.rb:122:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation_director.rb:64:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation_director.rb:63:in `each' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/expectation_director.rb:63:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/core.rb:76:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/core.rb:75:in `each' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/core.rb:75:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/core.rb:191:in `flexmock_wrap' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/core.rb:74:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/mock_container.rb:40:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/mock_container.rb:39:in `each' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/mock_container.rb:39:in `flexmock_verify' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/mock_container.rb:32:in `flexmock_teardown' 
    /Library/Ruby/Gems/1.8/gems/flexmock-0.9.0/lib/flexmock/test_unit.rb:26:in `teardown']: 
in mock 'filehandle': method '<<("<plist version=\"1.0\">")' called incorrect number of times. 
<1> expected but was 
<0>. 

我在做什麼錯?在此先感謝

回答

0

回答在同一問題的情況下別人絆倒我自己的問題 - 改變了模擬定義

def setup 
    @filehandle = flexmock("filehandle") 
end 

即,沒有方法。出於同樣的原因,這解決了問題