程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(windows)(二十六)- 使用Mock對象

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

編輯:關於JAVA

前面我們測試了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讓這些工作變得簡單。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved