成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

單元測試第三彈——使用JUnit進行單元測試

開發 開發工具
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。

上一彈中介紹了單元測試以及單元測試框架,這一彈主要來介紹一下JUnit這個目前比較流行的單測框架。

JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。

現在很多IDE中都已經集成了JUnit,當我們在創建maven項目的時候,一般在pom文件中也會自動增加junit的依賴。

  1. <dependency> 
  2.     <groupId>junit</groupId> 
  3.     <artifactId>junit</artifactId> 
  4.     <scope>test</scope> 
  5.     <version>4.4</version> 
  6. </dependency> 

注意上面的maven的依賴中的scope,因為junit只在測試代碼中會被用到,這里scope指定未test即可。我們直接使用和介紹JUnit4。

上手JUnit

要測試,要先有被測代碼(當然,基于測試編程可以先有測試代碼)。先來看我們想要測試的代碼:

  1. public class CaculateService { 
  2.     public float divide(float divisor, float dividend) { 
  3.         return divisor / dividend; 
  4.     } 

我們想要測試這個類,那么如何使用Junit進行測試呢?先來寫一個測試類。如果你使用的是IntelliJ+Mac,那么可以在類名上使用快捷鍵option+enter直接生成測試類,這樣IDE會幫忙生成一個對應的測試類。(其他操作系統和IDE也有同樣的功能)

生成后的測試代碼和被測代碼所處路徑如下:

可以看到,一般的maven項目中,會在src/main下面有兩個目錄,java和test,java目錄中放的是源碼,test目錄中放的是測試代碼。測試代碼和測試代碼的包名保持一致即可。

測試代碼如下:

  1. public class CaculateServiceTest { 
  2.     CaculateService caculateService = new CaculateService(); 
  3.     @Test 
  4.     public void testDivide() throws Exception { 
  5.        Assert.assertEquals(caculateService.divide(2, 1), 2.0); 
  6.     } 
  7.  

然后執行該方法就可以了,先不管Assert.assertEquals的用法及結果,這里總結下使用JUnit寫測試代碼的簡單步驟:

  • 創建一個名為 CaculateServiceTest.java 的測試類。
  • 向測試類中添加名為 testDivide() 的方法。
  • 向方法中添加 Annotaion @Test。
  • 執行測試條件并且應用 Junit 的 assertEquals API 來檢查。

JUnit中的Assert

  1. public class Assert extends java.lang.Object 
  • 這個類提供了一系列的編寫測試的有用的聲明方法。只有失敗的聲明方法才會被記錄。
  1. void assertEquals(boolean expected, boolean actual) 
  • 檢查兩個變量或者等式是否平衡
  1. void assertFalse(boolean condition) 
  • 檢查條件是假的
  1. void assertNotNull(Object object) 
  • 檢查對象不是空的
  1. void assertNull(Object object) 
  • 檢查對象是空的
  1. void assertTrue(boolean condition) 
  • 檢查條件為真
  1. void fail() 
  • 在沒有報告的情況下使測試不通過

這些方法我就不一一介紹了,相信我的讀者們都能看懂并在平時開發中用的到,還是比較容易理解的。

Assert可以用來判斷方法的真是結果和預期結果是否一樣。是我們在寫單元測試中用到最多的一個api。

JUnit中的注解

  • @BeforeClass:針對所有測試,只執行一次,且必須為static void
  • @Before:初始化方法
  • @Test:測試方法,在這里可以測試期望異常和超時時間
  • @After:釋放資源
  • @AfterClass:針對所有測試,只執行一次,且必須為static void
  • @Ignore:忽略的測試方法

一個單元測試類執行順序為:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一個測試方法的調用順序為:

@Before –> @Test –> @After

時間測試

如果一個測試用例比起指定的毫秒數花費了更多的時間,那么 Junit 將自動將它標記為失敗。timeout 參數和 @Test 注釋一起使用。現在讓我們看看活動中的 @test(timeout)。

  1. @Test(timeout = 1000)  
  2. public void testTimeoutSuccess() {  
  3. // do nothing  

異常測試

你可以測試代碼是否它拋出了想要得到的異常。expected 參數和 @Test 注釋一起使用。現在讓我們看看活動中的 @Test(expected)。

  1. @Test(expected = NullPointerException.class)  
  2. public void testException() {  
  3. throw new NullPointerException();  

所有測試代碼

  1. package com.hollischuang.effective.unitest.service; 
  2.  
  3. import org.junit.*; 
  4.  
  5. /** 
  6.  * @author Hollis 17/1/7. 
  7.  */ 
  8. public class JUnitTest { 
  9.  
  10.     /** 
  11.      * 只執行一次,在整個類執行之前執行 
  12.      */ 
  13.     @BeforeClass 
  14.     public static void beforeClass() { 
  15.         System.out.println("in before class"); 
  16.     } 
  17.  
  18.     /** 
  19.      * 只執行一次,在整個類執行之后執行 
  20.      */ 
  21.     @AfterClass 
  22.     public static void afterClass() { 
  23.         System.out.println("in after class"); 
  24.     } 
  25.  
  26.     /** 
  27.      * 每個測試方法被執行前都被執行一次 
  28.      */ 
  29.     @Before 
  30.     public void before() { 
  31.         System.out.println("in before"); 
  32.     } 
  33.  
  34.     /** 
  35.      * 每個測試方法被執行后都被執行一次 
  36.      */ 
  37.     @After 
  38.     public void after() { 
  39.         System.out.println("in after"); 
  40.     } 
  41.  
  42.     // test case 1 
  43.     @Test 
  44.     public void testCase1() { 
  45.         System.out.println("in test case 1"); 
  46.     } 
  47.  
  48.     // test case 2 
  49.     @Test 
  50.     public void testCase2() { 
  51.         System.out.println("in test case 2"); 
  52.     } 
  53.  
  54.     /** 
  55.      * 測試assertEquals 
  56.      */ 
  57.     @Test 
  58.     public void testEquals() { 
  59.         Assert.assertEquals(1 + 2, 3); 
  60.     } 
  61.  
  62.     /** 
  63.      * 測試assertTrue 
  64.      */ 
  65.     @Test 
  66.     public void testTrue() { 
  67.         Assert.assertTrue(1 + 2 == 3); 
  68.     } 
  69.  
  70.     /** 
  71.      * 測試assertFalse 
  72.      */ 
  73.     @Test 
  74.     public void testFals() { 
  75.         Assert.assertFalse(1 + 2 == 4); 
  76.     } 
  77.  
  78.     /** 
  79.      * 測試assertNotNull 
  80.      */ 
  81.     @Test 
  82.     public void assertNotNull() { 
  83.         Assert.assertNotNull("not null"); 
  84.     } 
  85.  
  86.     /** 
  87.      * 測試assertNull 
  88.      */ 
  89.     @Test 
  90.     public void assertNull() { 
  91.         Assert.assertNull(null); 
  92.     } 
  93.  
  94.     /** 
  95.      * 測試fail和Ignore 
  96.      */ 
  97.     @Test 
  98.     @Ignore 
  99.     public void assertFail() { 
  100.         Assert.fail(); 
  101.     } 
  102.  
  103.     /** 
  104.      * 測試異常 
  105.      */ 
  106.     @Test(expected = NullPointerException.class) 
  107.     public void testException() { 
  108.         throw new NullPointerException(); 
  109.     } 
  110.  
  111.     /** 
  112.      * 測試時間 
  113.      */ 
  114.     @Test(timeout = 1000) 
  115.     public void testTimeoutSuccess() { 
  116.         // do nothing 
  117.     } 
  118.  
  119.     /** 
  120.      * 測試時間 
  121.      */ 
  122.     @Test(timeout = 1000) 
  123.     public void testTimeoutFailed() { 
  124.         while (true) { 
  125.  
  126.         } 
  127.     } 

總結

本文主要介紹了JUnit的常見用法,后面會專門寫一篇文章介紹如何將JUnit和Spring集合到一起。

【本文是51CTO專欄作者Hollis的原創文章,作者微信公眾號Hollis(ID:hollischuang)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: Hollis
相關推薦

2017-01-14 23:26:17

單元測試JUnit測試

2017-03-23 16:02:10

Mock技術單元測試

2017-01-14 23:42:49

單元測試框架軟件測試

2013-06-04 09:49:04

Spring單元測試軟件測試

2021-03-28 23:03:50

Python程序員編碼

2011-08-11 13:02:43

Struts2Junit

2023-07-26 08:58:45

Golang單元測試

2023-08-02 13:59:00

GoogleTestCTest單元測試

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 19:57:29

EclipseJUnit4單元測試

2009-06-08 20:04:06

EclipseJUnit4單元測試

2012-05-17 09:09:05

Titanium單元測試

2020-08-18 08:10:02

單元測試Java

2009-08-19 09:00:48

單元測試框架自動化測試

2015-09-28 15:03:38

網絡架構測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2024-10-16 16:09:32

2011-11-18 15:18:41

Junit單元測試Java

2011-07-04 18:16:42

單元測試

2020-05-07 17:30:49

開發iOS技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区二区三区一线天视频 | 精品国产乱码久久久久久牛牛 | av手机在线免费观看 | 亚洲性网 | 中文字幕国产高清 | 2022国产精品 | 久久影音先锋 | 久久久久久中文字幕 | 欧美精品一区二区三区在线播放 | 国产电影一区 | 国产精品久久久久久吹潮日韩动画 | h在线观看 | 伊人网在线综合 | 日韩不卡视频在线观看 | 欧美一区二区三区日韩 | 男女下面一进一出网站 | 国产精品一区二区av | 国产农村一级片 | av一区二区三区四区 | 亚洲综合无码一区二区 | 久久亚 | 一区二区三区在线 | 欧 | 亚洲男女激情 | 国产精品99久久久久久动医院 | 欧美一区二区三区四区五区无卡码 | 男人天堂网址 | 亚洲一区在线日韩在线深爱 | 免费a网| 黄a免费看 | 亚洲国产精品久久久久 | 欧美一区免费 | 国产高清视频一区 | 日韩中文在线视频 | 成年人黄色一级毛片 | 男人的天堂在线视频 | 亚洲大片| 在线黄av | 日本不卡一区二区三区在线观看 | 91久久国产精品 | 日韩av成人在线 | 超碰在线97国产 |