日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简而言之,JUnit:Hello World

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简而言之,JUnit:Hello World 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于Java世界中的開發人員而言, JUnit似乎是最受歡迎的測試工具 。 因此,難怪就此主題已經寫了一些好書 。 但是,通過以顧問為生,我仍然經常遇到程序員,他們至多對工具及其正確用法都不了解。

因此,我想到了寫幾篇介紹基本技術的文章的想法。 目的是提供一個合理的起點,但要避免令人生畏的信息泛濫xUnit測試模式1 。 相反,將在適當時提供指向深入文章,書籍章節或不同意見的指針,以便進一步閱讀。

盡管存在有關該主題的其他文章,但本微型系列文章中采用的方法可能適合幫助一兩個開發人員熟悉JUnit測試的世界-這將使工作值得。

何必呢?

編寫高質量的軟件是一項艱巨的任務。 至于其他許多倡導敏捷方法的人,對我而言,進行大規模的前期計劃并不可行。 但是,就所有這些方法而言,當我們開始將JUnit與TDD一起使用時,我獲得了最大的進步。 確實,實證研究似乎證實了我的看法,正如infoQ文章所述2 ,這種做法可以提高質量 。

但是,JUnit測試并不像看起來那樣瑣碎。 我們一開始犯的一個致命錯誤是將測試班視為第二等公民。 逐漸地,我們意識到測試不僅僅是一個簡單的驗證機,而且-如果編寫得不當心,可能會給維護和進步帶來麻煩3

如今,我傾向于將測試用例更多地視為被測單元的隨附規范 。 與齒輪之類的工件的規格非常相似,它告訴質量檢查人員該單元必須滿足哪些關鍵指標。 但是由于軟件的性質,只有開發人員才能編寫如此低級的規范。 這樣,自動化測試就成為有關單元預期行為的重要信息來源。 還有一個不像文檔那樣容易過時的…

入門

一千英里的旅程始于一步
老子

讓我們假設我們必須編寫一個簡單的數字范圍計數器,該計數器從給定值開始傳遞一定數量的連續整數。 遵循隨附規范的隱喻,我們可以從以下代碼開始:

public class NumberRangeCounterTest { }

測試類表達了開發單位NumberRangeCounter的意圖 , Meszaros將其表示為被測系統 (SUT)。 按照通用的命名模式,單元名稱由后綴Test補充。

一切都很好,但是急躁的人可能會想:下一步是什么? 首先應該測試什么? 而且–無論如何我如何創建可執行測試?

有多種方法可以合并JUnit。 如果您使用Eclipse Java IDE,則該庫已包含在內。 只需將其添加到項目的構建路徑中,這在本教程中就足夠了。 要獲得自己的副本,請參閱下載并安裝 ,有關maven集成的信息,請參見《 使用JUnit》 ;如果您碰巧需要OSGi捆綁軟件,請在月食軌道下載中查找。

通常,從Happy Path開始是個好主意, Happy Path是執行的“正常”路徑,理想情況下是一般業務用例。 對于SUT NumberRangeCounter這可能是一個驗證測試,以確保計數器在方法的后續調用中返回連續的數字,該方法仍必須定義。

可執行的JUnit測試是一個公開的非靜態方法,該方法使用@Test進行注釋,并且不帶任何參數。 總結所有這些信息,下一步可能是以下方法存根4

public class NumberRangeCounterTest {@Testpublic void subsequentNumber() { } }

仍然不多,但實際上JUnit第一次運行測試就足夠了。 可以從命令行或特定的UI啟動JUnit測試運行,但是在本教程的范圍內,我假定您具有可用的IDE集成。 在Eclipse中,結果看起來像這樣5

綠色條表示測試運行未發現任何問題。 這并不奇怪,因為我們還沒有測試任何東西。 但是請記住,我們已經做了一些有用的考慮,可以幫助我們輕松地進行第一個測試:

  • 我們打算編寫一個NumberRangeCounter單元,該單元負責傳遞連續的整數值序列。 為了測試它,我們可以創建一個局部變量,該局部變量采用此類計數器的新實例。
  • @Testpublic void subsequentNumber() { NumberRangeCounter counter = new NumberRangeCounter();}
  • 由于第一個測試應該斷言NumberRangeCounter提供的數字是連續的整數值,表示5、6、7等,因此SUT可以使用提供這些值的方法。 此外,可以兩次調用此方法以提供最小的后續值集。
  • @Testpublic void subsequentNumber() { NumberRangeCounter counter = new NumberRangeCounter();int first = counter.next();int second = counter.next();}
  • 到目前為止看起來很合理,但是如果second的值不是first的有效后繼,我們如何確保測試運行被表示為失敗? 為此,JUnit提供了org.junit.Assert類,該類提供了一組靜態方法來幫助開發人員編寫所謂的自檢測試。

    帶有assert前綴的方法用于檢查特定條件,并在否定結果上拋出AssertionError 。 JUnit運行時會拾取此類錯誤,并在結果報告中將測試標記為失敗。

    2014年8月13日更新:使用org.junit.Assert只是一種可能。 JUnit還包括一個匹配器庫Hamcrest ,許多人認為它是有關干凈代碼的更好解決方案。 我個人最喜歡名為AssertJ的第三方庫的語法。

    我認為Assert對于初學者來說可能更直觀,因此我為“ hello world”帖子選擇它。 由于對該決定的評論,我意識到至少在這一點上我不得不提到其他可能性。 我將在后續文章中詳細介紹Hamcrest和AssertJ的用法。

    要斷言兩個值或對象相等,可以使用Assert#assertEquals 。 由于在聲明方法調用中使用靜態導入是很常見的,因此subsequentNumber測試可以像這樣完成:

    @Testpublic void subsequentNumber() { NumberRangeCounter counter = new NumberRangeCounter();int first = counter.next();int second = counter.next();assertEquals( first + 1, second );}

    如您所見,測試指定了SUT的重要行為,甚至還不存在。 順便說一句,這也意味著測試類不再編譯! 因此,下一步可能是創建我們部門的框架來解決此問題。

    盡管本教程是關于JUnit而不是TDD的,但是我還是選擇了后者的方法,以強調干凈的JUnit測試用例所具有的規范字符。 這種方法將工作重點從單位的內部轉移到其使用和較低級別的要求上。

    如果您想了解有關TDD的更多信息,特別是用于實現單個單元的“紅色/綠色/重構”口頭禪,可以讀一讀 Kent Beck的“ 示例驅動開發”或Lasse Koskela的“ 示例 驅動”一書。

    下面的代碼片段顯示了NumberRangeCounter存根的外觀:

    public class NumberRangeCounter {public int next() {return 0;} }

    再次運行測試,由于NumberRangeCounter#next()實現不足,現在導致出現紅條。 這樣可以確保通過無用的驗證或類似方式不會偶然滿足該規范:

    除紅色條外,執行報告還顯示總共運行了多少測試,哪些測試因錯誤而終止以及有多少由于錯誤的斷言而失敗。 每個錯誤/失敗的堆棧跟蹤信息有助于在測試類中找到確切的位置。

    AssertionError提供了一條解釋性消息,該消息顯示在故障跟蹤的第一行中。 錯誤測試可能表示任意編程錯誤,從而導致在測試的斷言語句之外引發Exception 。

    請注意,JUnit遵循“ 全有或全無”原則。 這意味著,如果一個測試運行涉及一個以上的測試(通常是這種情況),則單個測試的失敗將整個執行標記為紅色,表示失敗。

    由于某個特定單元的實際實現與本文主題無關,因此請您自己提出一種創新的解決方案,以使我們的第一個測試再次通過!

    結論

    前面的部分介紹了JUnit測試的基本知識–如何編寫,執行和評估它。 在這樣做的同時,我重視這樣的事實,即應該使用人們可能想到的最高編碼標準來開發此類測試。 給出的示例希望平衡得足夠好,以提供易于理解的介紹而又不瑣碎。 改進建議當然受到高度贊賞。

    Nutshell文章中的下一個JUnit將繼續該示例,并涵蓋測試用例的一般概念及其四個階段的測試結構,請繼續關注。

  • 不要誤會我的意思-我非常喜歡這本書,但是通用方法可能不是入門的最佳方法:xUnit測試模式, Gerard Meszaros ,2007年
  • 其他研究在http://biblio.gdinwiddie.com/biblio/StudiesOfTestDrivenDevelopment上列出,對實證研究的比較分析可在https://tuhat.halvi.helsinki.fi/portal/files/29553974/2014_01_swqd_author_version.pdf上找到。
  • 另請參閱:保持測試整潔,干凈的代碼,第9章, Robert C. Martin, 2009年
  • 關于如何命名測試方法的觀點存在分歧。 我已經在正確獲取JUnit測試名稱中寫下了有關此主題的一些注意事項
  • 有關如何在Eclipse中使用JUnit的更多信息,您可能想閱讀我的文章《 在Eclipse中有效使用JUnit》
  • 翻譯自: https://www.javacodegeeks.com/2014/08/junit-in-a-nutshell-hello-world.html

    總結

    以上是生活随笔為你收集整理的简而言之,JUnit:Hello World的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。