Java之Junit测试框架
一.Junit 是什么?
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個JUnit有它自己的JUnit擴展生態圈。多數Java的開發環境都已經集成了JUnit作為單元測試的工具。
注意:Junit 測試也是程序員測試,即所謂的白盒測試,它需要程序員知道被測試的代碼如何完成功能,以及完成什么樣的功能
二.Junit 能做什么?
我們知道 Junit 是一個單元測試框架,那么使用 Junit 能讓我們快速的完成單元測試
通常我們寫完代碼想要測試這段代碼的正確性,那么必須新建一個類,然后創建一個 main() 方法,然后編寫測試代碼。如果需要測試的代碼很多呢?那么要么就會建很多main() 方法來測試,要么將其全部寫在一個 main() 方法里面這也會大大的增加測試的復雜度,降低程序員的測試積極性。而 Junit 能很好的解決這個問題,簡化單元測試,寫一點測一點,在編寫以后的代碼中如果發現問題
可以較快的追蹤到問題的原因,減小回歸錯誤的糾錯難度
三.單元測試的工具有JUnit、TestNG、Mockito、Unitils等,其中JUnit、TestNG比較主流
JUnit4相關注解:
@BeforeClass:在所有測試方法前執行一次,一般在其中寫上整體初始化的代碼
@AfterClass:在所有測試方法后執行一次,一般在其中寫上銷毀和釋放資源的代碼。
@Before:在每個測試方法前執行,一般用來初始化方法(比如我們在測試別的方法時,類中與其他測試方法共享的值已經被改變,為了保證測試結果的有效性,我們會在@Before注解的方法中重置數據
@After:在每個測試方法后執行,在方法執行完成后要做的事情
@Test(timeout = 1000):指明要被測試的方法(測試方法執行超過1000毫秒后算超時,測試將失敗)
@Test(expected = Exception.class):測試方法期望得到的異常類,如果方法執行沒有拋出指定的異常,則測試失敗
@Ignore:執行測試時將忽略掉此方法,如果用于修飾類,則忽略整個類。
@Test:指明要被測試的方法。
@RunWith:指定用什么方式策略去運行這些測試集、類、方法。
@ActiveProfiles(“xxx”):在測試的時候啟用某些Profile的Bean。
注:JUnit5不僅新增了@ParameterizedTest注解等,還對JUnit4的部分注解進行了調整,如:注解名稱發生了變化(功能幾乎沒變)等。
四.斷言Assert:
程序員在測試時,使用斷言來判斷某些邏輯條件必須滿足。斷言判斷為真,下面的一些業務邏輯才可以進行下去,如果斷言判斷為假,程序就會"報錯"甚至是"崩潰"
斷言與異常、錯誤的區別:
"斷言"通常是給程序開發人員自己使用,并且在開發測試期間使用。而異常等在程序運行期間觸發。通常"斷言"觸發后程序"崩潰"退出,不需要從錯誤中恢復。而"異常"通常會使用try/catch等結構從錯誤中恢復并繼續運行程序
斷言簡單使用示例: Assert.assertEquals(result, 3); 斷言還有很多方法
注:與斷言(assert)相似的叫假設(assume)。當斷言不成立時,當次測試的結果狀態將會是測試失敗;
而當假設不成立時,當次測試的結果狀態不是失敗,而是假設。斷言用得想多一些,本人也不介紹假設
注:未使用斷言的單元測試,不是一個合格的單元測試;使用System.out…的單元測試不是一個合格的單元測試;
需要人員盯著觀察的單元測試,不是一個合格的單元測試。
五.單元測試時的事務回滾:
在單元測試時,有時我們會進行事務回滾來恢復現場,設置方式為:在類上或方法上加@Transactional注解
測試代碼:
public class Calculator{public int add(int a,int b){return a+b;}public int sub(int a,int b){return a-b;}}public class CalculatorTest { // @Test // public void testAdd(){ // Calculator c = new Calculator(); // int result = c.add(1, 2); // Assert.assertEquals(result, 3); // }// @Test // public void testSub(){ // Calculator c = new Calculator(); // int result = c.sub(2,1); // Assert.assertEquals(result,1); // }Calculator c = null;@Beforepublic void testBeforeClass(){c = new Calculator();}@Testpublic void testAdd(){int result = c.add(1, 2);if(result==3){System.out.println("add()方法正確");}}@Testpublic void testSub(){int result = c.sub(2, 1);if(result==1){System.out.println("sub()方法正確");}}}public class JunitTest {public JunitTest(){System.out.println("構造函數");}@BeforeClasspublic static void beforeClass(){System.out.println("@BeforeClass");}@Beforepublic void befor(){System.out.println("@Before");}@Testpublic void test(){System.out.println("@Test");}@Ignorepublic void ingore(){System.out.println("@Ignore");}@Afterpublic void after(){System.out.println("@After");} @AfterClasspublic static void afterClass(){System.out.println("@AfterClass");} }總結
以上是生活随笔為你收集整理的Java之Junit测试框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KubeCon China 2021 阿
- 下一篇: java实现计算器框架_[Java小程序