2011-02-05 118 views
2

當使用rspec進行測試時,是否可以檢查傳遞給非靜態方法的參數?在Rspec中測試非靜態方法?

如果我即將要測試A類,那麼在A類內部我稱之爲B類,B已經過測試。我想測試的唯一的事是遷入參數B.

class A 
    def method 
    number = 10 
    b = B.new 
    b.calling(number) 
    end 
end 

class B 
    def calling(argument) 
    # This code in this class is already testet 
    end 
end 

如何測試的進入參數b.calling

我已經嘗試過目前爲止沒有成功。

it "should work" do 
    b = mock(B) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 

它總是失敗,怎麼一回事,因爲b從來沒有被調用。

回答

4

在規範的B不是B A被實例化(返回,當你調用新的,因爲你還沒有存根其B的真實實例),試試這個:

it "should work" do 
    b = mock(B) 
    B.should_receive(:new).and_return(b) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 
+0

謝謝,這成功了! – Oleander 2011-02-05 20:04:49