Ruby on rails開發從頭來(windows)(二十六)- 使用Mock對象

來源:互聯網
上載者:User
前面我們測試了model和controller,學習了一些常用的測試方法,現在我們來深入學習幾個有關測試的主題。第一個是使用Mock對象。

在很多時候,我們的程式和實際的環境有依存關係,比如現在的購物車,在匯款,結賬的時候要接入網路上的銀行帳號,這樣就造成了我們測試的時候必須要有internet環境。比如,我們在model目錄裡建立了一個payment_gateway.rb來處理網路銀行相關的操作,我們在store_control.rb的save_order方法裡這樣寫:

gateway = PaymentGateway.new

  response = gateway.collect(:login => 'username',

    :password => 'password',

    :amount => cart.total_price,

    :card_number => @order.card_number,

    :expiration => @order.card_expiration,

    :name => @order.name)

我們在gateway的collect方法中使用銀行帳號的使用者名稱,密碼等資訊,但是這樣一來,我們在測試的時候必須具有真實的internet環境,並且,我們不想在每次運行測試的時候都真正得去操作銀行賬戶。

所以,我們需要的是一個假對象(mock)或PaymentGateway的一個替代品,在這裡,rails為我們提供了方便,我們所要做的就是在test/mock/test/目錄下建立一個payment_gateway.rb檔案,用來覆蓋app/models目錄下的payment_gateway.rb,要注意,這兩處的檔案名稱必須完全一致。Mock檔案的內容:

require 'models/payment_gateway'

class PaymentGateway

  def collect(request)

    # I'm a mocked out method

    :success

  end

end

這意味著我們用mock對象替代了真實的models目錄下的PaymentGateway,而collect方法也返回一個假的響應。

在測試的時候,Rails會先到mock對象所在的目錄尋找,這樣,載入的就是mock目錄下的類,而不是真實的models目錄下的類。

這樣,通過使用mock對象,我們可以將精力放在重要的,優先順序高的測試上,rails讓這些工作變得簡單。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.