您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 >
跨越邊界: 在集成框架中進(jìn)行測(cè)試--在 Ruby on Rails 中進(jìn)行單元測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/27 15:39:39 ] 推薦標(biāo)簽:

再次注意,Rails 已經(jīng)為您創(chuàng)建了測(cè)試用例?蚣懿粌H為這個(gè)簡(jiǎn)單的小程序生成了視圖和控制器,而且還生成了有助于測(cè)試用戶(hù)界面的功能性測(cè)試。

對(duì) Rails 應(yīng)用程序進(jìn)行單元測(cè)試

現(xiàn)在是運(yùn)行一些測(cè)試的時(shí)候了。請(qǐng)看第一個(gè)測(cè)試,它已經(jīng)在 test/unit/trail_test.rb 中寫(xiě)好了:

清單 8. 第一個(gè)測(cè)試


require File.dirname(__FILE__) + '/../test_helper'

class TrailTest < Test::Unit::TestCase
   fixtures :trails

   # Replace this with your real tests.
   def test_truth
      assert true
   end
end


確實(shí),這個(gè)測(cè)試用例算不了什么,但您可以從中看出如何構(gòu)架測(cè)試代碼,而且自己的測(cè)試用例的模板也已經(jīng)位。請(qǐng)運(yùn)行測(cè)試,如清單 9 所示(包括結(jié)果):

清單 9. 運(yùn)行第一個(gè)測(cè)試


> ruby test/unit/trail_test.rb
    Loaded suite test/unit/trail_test
    Started
    EE
    Finished in 0.027314 seconds.

      1) Error:
    test_truth(TrailTest):
    ActiveRecord::StatementInvalid: Mysql::Error: #42S02Table
      'trails_test.trails' doesn't exist: DELETE FROM trails

...results deleted...


測(cè)試用例失敗,但是請(qǐng)看輸出。第一行執(zhí)行測(cè)試。第三行 EE 顯示測(cè)試的結(jié)果。如果測(cè)試用例通過(guò),會(huì)得到 “.” 字符。如果測(cè)試用例產(chǎn)生錯(cuò)誤,會(huì)看到 E。如果某個(gè)斷言不是 true,那么將看到 F。接下來(lái),可以看到所請(qǐng)求的全部測(cè)試都將完成,以及完成這些測(cè)試需要的時(shí)間。后,將看到每個(gè)失敗的詳細(xì)原因。在這個(gè)示例中沒(méi)有表,這是有一定原因的,因?yàn)樵跍y(cè)試數(shù)據(jù)庫(kù)中還沒(méi)有創(chuàng)建任何表。通過(guò)將開(kāi)發(fā)方案復(fù)制到測(cè)試環(huán)境,再重新運(yùn)行測(cè)試,可以修復(fù)錯(cuò)誤,如清單 10 所示:

清單 10. 復(fù)制方案,重新運(yùn)行測(cè)試


> rake clone_schema_to_test          (in /Users/batate/rails/trails)
> ruby test/unit/trail_test.rb
    Loaded suite test/unit/trail_test
    Started
    .
    Finished in 0.038578 seconds.

    1 tests, 1 assertions, 0 failures, 0 errors


這樣更好。但是測(cè)試還是太簡(jiǎn)單,所以是構(gòu)建一個(gè)真正的測(cè)試用例的時(shí)候了。請(qǐng)?zhí)砑酉旅孢@個(gè)新測(cè)試用例 test_truth,如清單 11 所示:

清單 11. 添加測(cè)試用例


    def test_truth
      assert true
    end

    def test_new
      trails = Trail.find_all
      Trail.new do |trail|
        trail.name = "Barton Creek"
        trail.description = "A little water in the Spring. You'll get wet."
        trail.difficulty = "medium"
        trail.save
      end
      bc = Trail.find_by_name("Barton Creek")
      assert_equal "medium", bc.difficulty
      assert_equal trails.size + 1, Trail.find_all.size

    end


這個(gè)代碼驚人的緊湊。只需要鍵入上述代碼以及兩個(gè)斷言,可以操縱持久模型。這種經(jīng)濟(jì)的投入正是腳本語(yǔ)言在其他環(huán)境中如此流行的原因。測(cè)試也是需要經(jīng)濟(jì)投入的地方。

現(xiàn)在可以運(yùn)行測(cè)試用例,您將看到兩個(gè)新斷言顯示在測(cè)試報(bào)告中。使用 Ruby 時(shí),只需保存并編譯測(cè)試即可。清單 12 顯示了測(cè)試運(yùn)行的結(jié)果:

清單 12. 測(cè)試結(jié)果


> ruby test/unit/trail_test.rb
    Loaded suite test/unit/trail_test
    Started
    .
    Finished in 0.038578 seconds.

    1 tests, 1 assertions, 0 failures, 0 errors
    bruce-tates-computer:~/rails/trails batate$ ruby test/unit/trail_test.rb
    Loaded suite test/unit/trail_test
    Started
    ..
    Finished in 0.182043 seconds.

    2 tests, 3 assertions, 0 failures, 0 errors


Fixture 和回滾
Java mock 對(duì)象

上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd