一分鐘瞭解ruby中的單測

以前用gtest寫過不少c++的單測case, 對gtest的強大和靈活印象深入;最近須要用ruby寫一個小工具, 接觸了下ruby, 寫了代碼就要寫單測啊(好的單測確實對代碼的健壯性和正確性保證上過重要了)html

簡單搜了下發現 單測是ruby的一部分, 而不像c++等要引用gtest等三方庫,簡單可依賴,  簡單寫個例子c++

代碼:web

module Brtest
    class Myfile
       def write(theFile,theCont)
            _fileName=File.dirname(__FILE__)+"/tmp/"+theFile
            Dir.mkdir(File.dirname(_fileName)) unless File.exist?(File.dirname(_fileName))
            aFile = File.new(_fileName,"w")
            aFile.puts theCont
            aFile.close
       end
    end 
end

對應單測, 放在test目錄下:ruby

require "test/unit"
require File.dirname(__FILE__)+"/../file"
include Brtest

require "Watir-webdriver"
include Watir

class TestFile < Test::Unit::TestCase
   def test_write
      _file = Myfile.new
      _file.write("test_file","testcontent")
   end
   def test_write_html
      br = Watir::Browser.new :ie
      br.goto "baidu.com"
      _file = Myfile.new
      _file.write("test_file_html",br.html)
      br.close
   end
      
end 

運行結果:less

這個單測其實還有個問題, 沒有清理單測生成的文件; 正確的作法應該是生成了測試文件, case中檢查文件的內容是否符合預期, 若是符合 就刪掉, 不符合則失敗。  我以爲實際使用中能夠靈活處理, 好比個人目的就是驗證個人代碼是可用的, 而不是把case做爲每次迴歸來使用的, 能夠不嚴格按照要求。工具

另外附上經常使用的斷言(參數msg表示測試失敗時顯示的消息):測試

assert(boolean, [msg])
assert_equal (expected, actual, [msg])
assert_not_equal (expected, actual, [msg])
assert_match (pattern, string, [msg])
assert_no_match (pattern, string, [msg])
assert_nil (object, [msg])
assert_not_nil (object, [msg])
assert_instance_of (class, object, [])
assert_kind_of (class, object, [])
assert_ralse (Exception, …) {block}
assert_nothing_ralsed (Exception, …) {block}ui

相關文章
相關標籤/搜索