標籤:sage har 對象 測試的 操作 編程 mod for 程式員
(1)什麼是測試?TDD
TDD是測試編程驅動,編程方法學,也是一種編程思想,是先寫測試案例再編碼。特點是:保證了代碼的品質,測試的覆蓋率高,但是開發效率低。
DDD
領域驅動設計
測試本身也是一套完整學科單元測試
- 白盒測試 --- 能看到完整的代碼
- 黑箱測試 --- 沒有源碼的,也叫功能測試。
- 灰盒測試
壓力測試
並發數的問題,能承載多少並發
疲勞強度測試
系統長期穩定運行,如果72小時能穩定運行,說明該系統度過了疲勞強度初步測試,正常是7天
煙霧測試 (Smoke Test)
對一個功能點瘋狂的測試,主要是對流程測試,如支付環節
整合測試
完成功能的測試,最重要的是測試整體商務程序
迴歸測試
當其他測試都完成後,當增加一個功能或者修改時,有可能影響整個系統,這時候就需要迴歸測試
自動化測試
需要編碼、類比情境設計
(2)JUnit 簡介
JUnit 是用於編寫和運行可重複的自動化測試的開源測試架構,這樣可以保證我們的代碼按預期工作。JUnit 可廣泛用於工業和作為支架(從命令列)或IDE(如 IDEA)內單獨的 Java 程式。 JUnit 提供:
- 斷言測試預期結果。
- 測試功能共用通用的測試資料。
- 測試套件輕鬆地組織和運行測試。
- 圖形和文本測試回合。
- JUnit 用於測試:
- 整個對象
- 對象的一部分 - 互動的方法或一些方法
- 幾個對象之間的互動(互動)
JUnit 特點
- JUnit 是用於編寫和運行測試的開源架構。
- 提供了注釋,以確定測試方法。
- 提供斷言測試預期結果。
- 提供了測試回合的運行測試。
- JUnit 測試讓您可以更快地編寫代碼,提高品質
- JUnit 是優雅簡潔。它是不那麼複雜以及不需要花費太多的時間。
- JUnit 測試可以自動運行,檢查自己的結果,並提供即時反饋。沒有必要通過測試結果報告來手動梳理。
- JUnit 測試可以組織成測試套件包含測試案例,甚至其他測試套件。
- Junit 顯示測試進度的,如果測試是沒有問題條形是綠色的,測試失敗則會變成紅色。
(3) JUnit 註解
@Test public void method() //測試注釋指示該公用無效方法它所附著可以作為一個測試案例。@Before public void method() //Before 注釋表示,該方法必須在類中的每個測試之前執行,以便執行測試某些必要的先決條件。@BeforeClass public static void method() //BeforeClass 注釋指出這是附著在靜態方法必須執行一次並在類的所有測試之前。發生這種情況時一般是測試計算共用配置方法(如串連到資料庫)。@After public void method() //After 注釋指示,該方法在執行每項測試後執行(如執行每一個測試後重設某些變數,刪除臨時變數等)@AfterClass public static void method() //當需要執行所有的測試在 JUnit 測試案例類後執行,AfterClass 註解可以使用以清理建立方法,(從資料庫如中斷連線)。注意:附有此批註(類似於 BeforeClass)的方法必須定義為靜態。@Ignore public static void method() //當想暫時禁用特定的測試執行可以使用忽略注釋。每個被註解為 @Ignore 的方法將不被執行。
(4)第一個 JUnit 單元測試POM
pom.xml 檔案如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xue</groupId> <artifactId>hello-spring</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.17.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies></project>
主要增加了 junit:junit 依賴
建立測試類別
在測試包下 src/main/test 建立一個名為 MyTest 的測試類別,代碼如下:
package com.xue.hello.spring.test;import org.junit.After;import org.junit.Before;import org.junit.Test;public class MyTest { /** * 執行測試方法前執行 */ @Before public void before() { System.out.println("執行 before() 方法"); } /** * 執行測試方法後執行 */ @After public void after() { System.out.println("執行 after() 方法"); } @Test public void testSayHi() { System.out.println("Hi Log4j"); } @Test public void testSayHello() { System.out.println("Hello Log4j"); }}
(5)JUnit 斷言什麼是斷言
斷言是編程術語,表示為一些布林運算式,程式員相信在程式中的某個特定點該運算式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程式投入運行後,終端使用者在遇到問題時可以重新啟用斷言。
使用斷言可以建立更穩定、品質更好且 不易於出錯的代碼。當需要在一個值為 false 時中斷當前操作的話,可以使用斷言。單元測試必須使用斷言(Junit/JunitX)。
常用斷言方法
| 斷言 |
描述 |
| void assertEquals([String message], expected value, actual value) |
斷言兩個值相等。值可能是類型有 int, short, long, byte, char or java.lang.Object. 第一個參數是一個可選的字串訊息 |
| void assertTrue([String message], boolean condition) |
斷言一個條件為真 |
| void assertFalse([String message],boolean condition) |
斷言一個條件為假 |
| void assertNotNull([String message], java.lang.Object object) |
斷言一個對象不為空白(null) |
| void assertNull([String message], java.lang.Object object) |
斷言一個對象為空白(null) |
| void assertSame([String message], java.lang.Object expected, java.lang.Object actual) |
斷言,兩個對象引用相同的對象 |
| void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) |
斷言,兩個對象不是引用同一個對象 |
| void assertArrayEquals([String message], expectedArray, resultArray) |
斷言預期數組和結果數組相等。數組的類型可能是 int, long, short, char, byte or java.lang.Object. |
注意:==比較的是地址, equals比較的是值
測試斷言效果
在之前的單元測試類中建立一個名為 testAssert 方法來查看斷言效果
/** * 測試斷言 */@Testpublic void testAssert() { String obj1 = "junit"; String obj2 = "junit"; String obj3 = "test"; String obj4 = "test"; String obj5 = null; int var1 = 1; int var2 = 2; int[] arithmetic1 = {1, 2, 3}; int[] arithmetic2 = {1, 2, 3}; //如果為真往下執行 assertEquals(obj1, obj2); assertSame(obj3, obj4); assertNotSame(obj2, obj4); assertNotNull(obj1); assertNull(obj5); assertTrue("為真", var1 == var2); assertArrayEquals(arithmetic1, arithmetic2);}
JUnit 單元測試