Ruby單元測試mock庫:FlexMock

jopen 10年前發布 | 15K 次閱讀 FlexMock 單元測試

FlexMock是一個比較流行的針對Rails單元測試的Mock工具。

編寫測試的時候,可能需要和系統內的某個模塊或系統外某個實體交互,例如數據庫讀寫、郵件發送等。這時就需要使用 mock 技術來模擬。

簡單的例子

我們有一個獲取數據的類TemperatureSampler,從溫度感應器中讀取數據,并返回三次讀取的平均值。當我們運行測試的時候,我們并沒有真正的溫度感性器,所以我們需要一個mock對象來響應read_temperature消息:

require 'test/unit'
require 'flexmock/test_unit'

class TemperatureSampler
  def initialize(sensor)
    @sensor = sensor
  end

  def average_temp
    total = (0...3).collect {
      @sensor.read_temperature
    }.inject { |i, s| i + s }
    total / 3.0
  end
end

class TestTemperatureSampler < Test::Unit::TestCase
  def test_sensor_can_average_three_temperature_readings
    sensor = flexmock("temp")
    sensor.should_receive(:read_temperature).times(3).
      and_return(10, 12, 14)

    sampler = TemperatureSampler.new(sensor)
    assert_equal 12, sampler.average_temp
  end
end


項目主頁:http://www.baiduhome.net/lib/view/home/1394781925509

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!