溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

自動化單元測試

發(fā)布時間:2020-06-14 17:40:29 來源:網(wǎng)絡(luò) 閱讀:216 作者:博文視點(diǎn) 欄目:軟件技術(shù)

自動化單元測試

人們在使用“單元測試”這個術(shù)語時比較隨意。這可能會導(dǎo)致困惑,特別是當(dāng)人們開始聲稱他們的單元測試“花了很長的時間執(zhí)行”時。為開發(fā)者測試定義一個常用詞匯表有助于將測試進(jìn)行有效的分類,從而創(chuàng)建一個有效的CI系統(tǒng),能夠執(zhí)行快速的構(gòu)建。

“單元測試”驗(yàn)證軟件系統(tǒng)中所有小元素的行為,這些小元素通常都是一個類。但是有時候,單元測試和被測試的類之間的這種一對一的關(guān)系會被放大,因?yàn)橐恍┍粶y試的類耦合程度較高。

代碼清單6-1展示了利用TestNG框架編寫的單元測試。TestNG是基于annotation的,因此@testng.test這樣Javadoc一樣的注釋出現(xiàn)在了startPatternTest方法中。通過Java1.4assert語句,這個測試用例驗(yàn)證了RegexPackageFilter類通過一個正則表達(dá)式模式正確地過濾了字符串。

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

public class RegexPackageFilterTestNG {

    /**

     * @testng.test

     */

    public void starPatternTest() throws Exception{

 

        Filter filter = new RegexPackageFilter("java.lang.*");

 

        assert filter.applyFilter("java.lang.String"):

            "filter returned false";

 

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

            "filter returned true for org.junit.TestCase";

    }

}

某些單元測試需要較少的外部依賴關(guān)系,這些依賴關(guān)系通常是其他的類。這些依賴的類本身比較簡單,沒有很復(fù)雜的類間關(guān)系。有時候,單元測試甚至使用模擬對象(mock),它們是一些簡單的對象,用于替換真實(shí)的、復(fù)雜的對象。如果依賴的對象本身確實(shí)依賴于外部的實(shí)體,如一個文件系統(tǒng)或數(shù)據(jù)庫,而這些外部對象又沒有虛擬化,測試就變成了組件測試(后面定義)。

代碼清單6-2展示了一個用Ruby寫的單元測試的例子,它驗(yàn)證了一個過濾器的行為。這個測試仍然是一個單元測試,雖然它使用了兩個類,RegexFilterSimpleFilter,因?yàn)樗皇褂昧艘粋€類型來驗(yàn)證行為。

代碼清單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 love to Gooogle on the Internet"))

    }

  end

end

單元測試的關(guān)鍵在于沒有外部的依賴關(guān)系,如數(shù)據(jù)庫。這些外部的依賴關(guān)系通常會使測試建立和執(zhí)行的時間變長。單元測試可以在開發(fā)周期的早期創(chuàng)建并執(zhí)行(例如第一天)。因?yàn)榫幋a和看到單元測試結(jié)果之間的時間很短,所以單元測試是一種有效的除錯方法。

 

自動化單元測試

圖書詳細(xì)信息:http://bvbroadview.blog.51cto.com/addblog.php

本文節(jié)選自《持續(xù)集成:軟件質(zhì)量改進(jìn)和風(fēng)險降低之道》一書

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

王海鵬 

電子工業(yè)出版社出版

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI