tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
tdd java
使用類似于BDD的語法,Java 8和Mockito-AssertJ二重奏為Idea調整JUnit測試類模板。
本文涵蓋的主題似乎很簡單。 但是,根據我的培訓師經驗,我知道(不幸的)這不是常見的做法。 因此,我決定寫這篇簡短的博客文章來傳播它們,并在將來能夠引用它。
我最喜歡的Java(和Groovy)測試框架是Spock 。 但是,它的模擬不適用于某些目的,我仍然在各種地方使用Mockito。 另外,我仍然針對已經在該堆棧中具有測試套件并且希望在不更改已知技術的情況下提高其技能的團隊,在JUnit / Mockito / AssertJ變體中進行很多測試培訓 。 因此,作為一個插曲,此博客文章介紹了純Java風格的測試,并假設您已經在使用Mockito和AssertJ(在其他情況下,請嘗試使用它們)建議如何調整JUnit測試框架。
此博客文章由樹部分組成。 首先,我提出了一種BDD樣式的基于節的測試結構,以使您的測試更一致,更易讀。 接下來,我將說明如何使用Java 8簡化使用AssertJ和Mockito的構造。最后但并非最不重要的一點是,我將展示如何在IntelliJ IDEA中將其配置為默認的JUnit測試(類)模板(這并不簡單)這應該)。
第1部分。BDD樣式的部分
編寫良好的單元測試應滿足幾個要求(但這是單獨發布的主題)。 有用的做法之一是將3個代碼塊明確劃分為具有明確定義的職責。 您可以在我以前的博客文章中閱讀有關該主題的更多信息 。
作為重復,僅以簡短形式列出了核心規則:
- given –測試中的對象初始化+存根/模擬的創建,存根和注入
- when –在給定測試中進行測試的操作
- then –收到結果聲明+模擬驗證(如果需要)
這種分離有助于保持測試的簡短性,并將重點放在測試的一項責任上(最終這只是一個單元測試)。
在Spock中,這些部分是必填(*)–沒有它們,測試甚至無法編譯。 在JUnit中只有注釋。 但是,將它們放置在適當位置會鼓勵人們使用它們,而不是在內部放置一大堆混亂(對于測試區域的新手尤其有用)。
順便說一句,提到的“先給后定”約定基于更廣泛的“ 行為驅動開發”概念(是其子集)。 您可能會在3個代碼塊上遇到類似的劃分,這些代碼塊稱為ranging-act-assert,通常這是等效的。
第2部分。AssertJ和Mockito的Java 8
Java 8的功能之一是能夠將默認方法放入接口。 這可以用來簡化對靜態方法的調用,這在測試框架(如AssertJ和Mockito)中很普遍。 這個想法很簡單。 愿意使用給定框架的測試類可以實現一個專用接口,以在IDE中完成代碼時將這些方法“視為”自己的方法(而不是外部類的靜態方法,這些方法要求在輸入類名之前或靜態導入) 。 那些默認方法只是將執行委托給靜態方法。 您可以在我的其他博客文章中了解更多信息 。
AssertJ本機支持從3.0.0版本開始的那些構造。 Mockito 1.10和2.x與Java 6兼容,因此需要使用一個第三方項目– mockito-java8 (一旦可用,應將其集成到Mockito 3中)。
為了從Idea中更容易完成方法中受益,實現兩個接口就足夠了:
import info.solidsoft.mockito.java8.api.WithBDDMockito; import org.assertj.core.api.WithAssertions;class SampleTest implements WithAssertions, WithBDDMockito {}第3部分。Idea中的默認模板
我是無所不在的自動化的狂熱愛好者。 在測試類中同時自動設置“先給定”部分和額外的接口,這不是很好嗎? 讓我們從生活中消除那些無聊的事情。
測試方法
更改JUnit測試方法很容易。 一種可能的方式是“ CTRL-SHIFT-A->文件模板->代碼”,并將JUnit4 Test Method修改為:
@org.junit.Test public void should${NAME}() {//given${BODY}//when//then }要在現有測試類中添加新測試,只需按ALT-INSERT并選擇(或鍵入) JUnit4 Test Method 。
測試班
在整個測試課程中,情況要復雜一些。 Idea提供了一種編輯現有模板的方法,但是,僅當使用生產類中的CTRL-SHIFT-T生成測試時才使用Idea。 對于TDD,首先創建一個測試不是很方便。 如果在測試上下文中的程序包視圖中按了ALT-INSERT則最好在“ Java類”旁邊顯示一個新位置“ New JUnit測試類”。 不幸的是,要做到這一點,就需要編寫一個新插件(Spock的示例實現 )。 作為一種解決方法,我們可以定義一個常規文件模板(作為限制),該模板可在任何地方(例如,甚至在資源目錄中)訪問。
執行“ CTRL-SHIFT-A->文件模板->文件”,按INSERT ,將模板命名為“具??有AssertJ和Mockito Test的JUnit”,將擴展名設置為“ java”,然后粘貼以下模板:
package ${PACKAGE_NAME};import info.solidsoft.mockito.java8.api.WithBDDMockito; import org.assertj.core.api.WithAssertions;#parse("File Header.java") public class ${NAME} implements WithAssertions, WithBDDMockito {}展示柜
我們已經準備好了。 讓我們檢查一下它在實際中的外觀(單擊以放大動畫)。
摘要
我希望我說服您調整測試模板以提高測試的可讀性并確保每個測試幾次擊鍵。 在這種情況下,請立即花費4分鐘在您的Idea中對其進行配置。 根據編寫的許多測試,它可能會比您所期望的更快開始回報:)。
順便說一句,十月初,我將在克拉科夫的JDD 上發表有關Mockito 2新功能的演講 。
自我提升 。 您想快速有效地提高您和您的團隊的測試技能以及對Spock / JUnit / Mockito / AssertJ的了解嗎? 我進行了濃縮(單元) 測試培訓 ,您可能會覺得有用。
翻譯自: https://www.javacodegeeks.com/2017/09/modern-tdd-oriented-java-8-junit-test-template-idea-mockito-assertj.html
tdd java
總結
以上是生活随笔為你收集整理的tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux与windows的区别(lin
- 下一篇: flowable背压 取消_使用Flow