精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

測試框架的利好和繁榮:Java單元測試框架之爭

責(zé)任編輯:editor005

作者:Michael Redlich

2016-06-28 15:55:36

摘自:INFOQ

在最近Java希臘用戶組會議中,《Java測試框架Spock》的作者Kostis Kapelonis做了演講,比較了JUnit和Spock。雖然靈感來自于JUnit,Spock的特性不僅僅是JUnit的擴(kuò)展:測試代碼使用Groovy語言編寫,而被測代碼可以由Java編寫。

最近Reddit上的討論帖引發(fā)了一場JUnit和Spock兩個測試框架支持者之間的辯論,源起于Jakub Dziworski發(fā)表的博文,其中心思想是“JUnit有什么問題?”目前來看幾乎每個GitHub倉庫都引入了基于JUnit的單元測試,不過也難怪畢竟JUnit已經(jīng)經(jīng)歷了超過15個年頭。但是Spock正在持續(xù)蠶食市場。

JUnit由極限編程(eXtreme programming)創(chuàng)始人Kent Beck、《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》合著者Erich Gamma共同創(chuàng)造,并且很快變成單元測試領(lǐng)域的事實標(biāo)準(zhǔn),被移植和克隆到幾乎所有流行的編程語言中。然而,這些年來JUnit的的特性一直被新的單元測試框架質(zhì)疑,例如TestNG和Spock。

TestNG

TestNG由《Java測試新技術(shù)TestNG和高級概念》合著者Cédric Beust于2004年創(chuàng)造。根據(jù)TestNG網(wǎng)站描述,“TestNG是從JUnit和NUnit汲取靈感的測試框架,但是引入了一些新的功能使其更加強(qiáng)大并且易于使用”。Beust在其自己的網(wǎng)站上寫道,“我開始編寫TestNG是出于無奈,JUnit有一些不足之處,這些問題我在博客的這里和這里進(jìn)行了標(biāo)注。”

Spock

Dziworski在博文中質(zhì)疑了使用JUnit需要結(jié)合第三方mock框架。他表示,“在中型和大型Java項目中結(jié)合這些框架會是得讀寫測試變得更加困難。”他隨后說道,“如果測試代碼難以編寫,開發(fā)者通常會將編寫測試代碼作為痛苦工作,并開始忽略它們。避免或者延遲編寫測試代碼會導(dǎo)致應(yīng)用無法再被信任。最后開發(fā)者會害怕修改這些代碼,因為應(yīng)用的其他部分可能以某種奇怪的方式出現(xiàn)問題。”

在最近Java希臘用戶組會議中,《Java測試框架Spock》的作者Kostis Kapelonis做了演講,比較了JUnit和Spock。

Spock由Gradleware首席工程師Peter Niederwieser于2008年創(chuàng)建。雖然靈感來自于JUnit,Spock的特性不僅僅是JUnit的擴(kuò)展:

測試代碼使用Groovy語言編寫,而被測代碼可以由Java編寫。 內(nèi)置mock框架以減少引入第三方框架。 可支持自定義測試件名稱。 為創(chuàng)建測試代碼預(yù)定義了行為驅(qū)動塊(given:、when:、then:、expect:等)。 使用數(shù)據(jù)表格以減少數(shù)據(jù)結(jié)構(gòu)的使用需求。

以下代碼片段(和Reddit討論中使用的相同)演示了部分特性的使用:

class Math extends Specification { def "maximum of two numbers"(int a, int b, int c) { expect: Math.max(a, b) == c where: a | b | c 1 | 3 | 3 // passes 7 | 4 | 4 // fails 0 | 0 | 0 // passes }}

這個簡單的測試示例使用了兩個預(yù)定義的塊,expect:(第三行)和where:(第五行)。where:塊用于定義數(shù)據(jù)表格,用于映射第四行定義的Math.max函數(shù)的期望輸入輸出。第二行演示了如何為測試用例自定義一個名稱。

一個包含JUnit和Spock代碼示例的完整項目可以在GitHub上查看。

早在2008年InfoQ就報道了關(guān)于JUnit滅亡的一些猜想。八年后JUnit 5項目仍然健在,里程碑1正在開發(fā)中。測試框架的利好和繁榮!

查看英文原文:Test Well and Prosper: The Great Java Unit-Testing Frameworks Debate

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2025 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 海宁市| 合江县| 香格里拉县| 宣武区| 郧西县| 云阳县| 洱源县| 中阳县| 景宁| 陆丰市| 肃宁县| 隆回县| 乌苏市| 鱼台县| 华容县| 布拖县| 密云县| 甘孜| 赤城县| 张北县| 临洮县| 嘉义县| 铜川市| 双峰县| 长汀县| 海伦市| 綦江县| 繁昌县| 云林县| 恩施市| 板桥市| 昌乐县| 乌什县| 淳安县| 荣昌县| 郁南县| 潜江市| 齐齐哈尔市| 四川省| 宜城市| 五常市|