自動化單元測試

來源:互聯網
上載者:User
自動化單元測試

人們在使用“單元測試”這個術語時比較隨意。這可能會導致困惑,特別是當人們開始聲稱他們的單元測試“花了很長的時間執行”時。為開發人員測試定義一個常用詞彙表有助於將測試進行有效分類,從而建立一個有效CI系統,能夠執行快速的構建。

“單元測試”驗證軟體系統中所有小元素的行為,這些小元素通常都是一個類。但是有時候,單元測試和被測試的類之間的這種一對一的關係會被放大,因為一些被測試的類別結合程度程度較高。

代碼清單6-1展示了利用TestNG架構編寫的單元測試。TestNG是基於annotation的,因此@testng.test這樣Javadoc一樣的注釋出現在了startPatternTest方法中。通過Java1.4的assert語句,這個測試案例驗證了RegexPackageFilter類通過一個Regex模式正確地過濾了字串。

代碼清單6-1  使用TestNG的隔離單元測試

public class RegexPackageFilterTestNG {

    /**

     * @testng.test

     */

    public void starPatternTest()throws Exception{

 

        Filter filter = newRegexPackageFilter("java.lang.*");

 

        assertfilter.applyFilter("java.lang.String"):

            "filter returned false";

 

        assert!filter.applyFilter("org.junit.TestCase"):

            "filter returnedtrue for org.junit.TestCase";

    }

}

某些單元測試需要較少的外部依賴關係,這些依賴關係通常是其他的類。這些依賴的類本身比較簡單,沒有很複雜的類間關係。有時候,單元測試甚至使用類比對象(mock),它們是一些簡單的對象,用於替換真實的、複雜的對象。如果依賴的對象本身確實依賴於外部的實體,如一個檔案系統或資料庫,而這些外部對象又沒有虛擬化,測試就變成了組件測試(後面定義)。

代碼清單6-2展示了一個用Ruby寫的單元測試的例子,它驗證了一個過濾器的行為。這個測試仍然是一個單元測試,雖然它使用了兩個類,RegexFilter和SimpleFilter,因為它只使用了一個類型來驗證行為。

代碼清單6-2  使用Ruby的隔離單元測試

require"test/unit"

require "filters"

 

class FiltersTest <Test::Unit::TestCase

 

  def test_regex

    fltr = RegexFilter.new(/Google|Amazon/)

   assert(fltr.apply_filter("Google"))

  end

 

  def test_simple

    fltr = SimpleFilter.new("oo")

   assert(fltr.apply_filter("google"))

  end

 

  def test_filters

    fltrs =[SimpleFilter.new("oo"), RegexFilter.new(/Go+gle/)]

    fltrs.each{ | fltr |

        assert(fltr.apply_filter("I loveto Gooogle on the Internet"))

    }

  end

end

單元測試的關鍵在於沒有外部的依賴關係,如資料庫。這些外部的依賴關係通常會使測試建立和執行的時間變長。單元測試可以在開發週期的早期建立並執行(例如第一天)。因為編碼和看到單元測試結果之間的時間很短,所以單元測試是一種有效除錯方法。

 

 

本文節選自《持續整合:軟體品質改進和風險降低之道》一書

[美]Paul M. Duvall
(保羅.M. 杜瓦爾)Steve Matyas
(史蒂夫.邁耶斯) Andrew Glover(安德魯.格洛弗) 著

王海鵬 譯

電子工業出版社出版

圖書詳細資料:http://blog.csdn.net/broadview2006/article/details/7660148

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.