亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUnit + Mockito單元測試
作者:網絡轉載 發布時間:[ 2016/12/29 11:43:39 ] 推薦標簽:單元測試 Junit

  JUnit 是 2015 年 Java 開發者引用多的庫,是 Java 單元測試框架里無可爭議的 No.1。JUnit 基本上能覆蓋大部分接口的測試,但如果待測接口依賴外部服務,比如我之前寫的這篇小文里描述的情況,JUnit 可能捉襟見肘了。而 Mockito 在 Mock 數據方面功能強大,正好彌補了 JUnit 在這方面的不足。風云合璧,摩訶無量。
  上面其實已經點到 JUnit 和 Mockito 的不同了,雖然二者都是運用在單元測試中,但 JUnit 側重對接口的運行狀態和結果的測試,而 Mockito 側重 “Mock” 數據,即對對象的模擬,尤其是不容易構造的復雜對象。
  JUnit + Mockito 組合的優勢是顯而易見的,對于服務化的系統,有了這個組合,能實現各上下游模塊并行開發,同時進行單元測試驗證可用性,減少串行聯調的時間。
  JUnit
  PS: 雖然 JUnit5 已經發布,但目前使用多的還是 JUnit4,所以本文仍然基于 JUnit4。
  利用 Maven 初始化一個簡單的 Java 應用:
  mvn archetype:generate -DgroupId=com.isudox -DartifactId=test-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  Maven 會自動創建好類文件和測試類,路徑如下:
test-demo
├── pom.xml       ---- pom 依賴配置文件
└── src           ---- 源碼路徑
├── main      ---- 類文件
│   └── java
│       └── com
│           └── isudox
│               └── App.java
└── test      ---- 測試類
└── java
└── com
└── isudox
└── AppTest.java
  在 pom.xml 中引入 JUnit4,
<dependencies>
<!-- junit4 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
  引入 JUnit 依賴后,能在測試類中,通過 JUnit 提供的注解和靜態方法,對接口進行測試了。先編寫一個簡單的待測試類 Calculator.java
// App.java
public classCalculator{
publicintevaluate(String expression)throwsException{
if (expression == null)
throw new Exception("null value");
int sum = 0;
for (String summand: expression.split("\+"))
sum += Integer.valueOf(summand);
return sum;
}
}
  然后在 src/test/ 路徑下創建同樣的包,將測試類命名為 CalculatorTest.java,如果是用 IntelliJ IDEA,可以直接在待測試類下通過快捷鍵 Ctrl+Shift+T 生成對應的測試類——
// CalculatorTest.java
import org.junit.Test;
import static org.junit.Assert.*;
public classCalculatorTest{
@Test
publicvoidevaluate()throwsException{
Calculator calculator = new Calculator();
int sum = calculator.evaluate("1+2+3");
assertEquals(6, sum);
}
}
  執行 mvn test ,反饋得接口運行正確。
  在上面這段簡單的代碼里,引入了 JUnit 的 @Test 注解和 Assert 下的系列靜態斷言方法。其中 @Test 注解把方法包裝為測試方法, assertEquals 方法用來斷言兩個入參是否一致。通過這個簡單的例子實現了對待測方法的測試。
  JUnit 支持豐富的測試規則,除了 @Test 注解外,還有下面這些注解——
  @Before 注解的作用是使被標記的方法在測試類里每個方法執行前調用;同理 After 使被標記方法在當前測試類里每個方法執行后調用。
  @BeforeClass 注解的作用是使被標記的方法在當前測試類被實例化前調用;同理 @AfterClass 使被標記的方法在測試類被實例化后調用。
  @Ignore 注解的作用是使被標記方法暫時不執行。
  參考下面這段代碼的運行:
import org.junit.*;
import static org.junit.Assert.*;
public classCalculatorTest{
publicCalculatorTest(){
System.out.println("Constructor");
}
@BeforeClass
publicstaticvoidbeforeThis()throwsException{
System.out.println("BeforeClass");
}
@AfterClass
publicstaticvoidafterThis()throwsException{
System.out.println("AfterClass");
}
@Before
publicvoidsetUp()throwsException{
System.out.println("Before");
}
@After
publicvoidtearDown()throwsException{
System.out.println("After");
}
@Test
publicvoidevaluate()throwsException{
Calculator calculator = new Calculator();
int sum = calculator.evaluate("1+2+3");
assertEquals(6, sum);
System.out.println("Test evaluate");
}
@Test
publicvoididiot()throwsException{
assertTrue(true);
System.out.println("Test idiot");
}
@Ignore
publicvoidignoreMe()throwsException{
System.out.println("Ignore");
}
}
  測試結果如下,從輸出結果可以印證不同注解對執行順序的影響:
  BeforeClass
  Constructor
  Before
  Test idiot
  After
  Constructor
  Before
  Test evaluate
  After
  AfterClass
  另外,每個測試方法執行時都會實例化一次測試類,JUnit 這樣處理的原因是保證每個測試方法彼此獨立互不干擾。
  對于 @Test 注解標記的方法, @Test 支持兩個參數的設置: timeout 和 expected 。前者是設置待測方法的執行超時時間,后者是設置對待測方法期望的拋出異常。修改 evaluate 測試方法的注解:
  @Test(timeout = 100, expected = Exception.class)
  publicvoidevaluate()throwsException{
  Calculator calculator = new Calculator();
  int sum = calculator.evaluate(null);
  assertEquals(6, sum);
  i++;
  System.out.println("Test evaluate " + i);
  }
  Maven 運行測試,從結果可以看到,方法拋出了異常,測試通過。
  Mockito
  相對于 JUnit,Mockito 則是 Mock 數據的測試框架,它簡化了對有外部依賴的類的單元測試。Mockito 的工作流程如下圖示( 圖片來源 ):

  首先在 pom.xml 中導入 mockito 依賴,
  pom.xml 依賴中添加 Mockito:
  <dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.2.0</version>
  <scope>test</scope>
  </dependency>

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 蝌蚪网在线视频 | 亚洲精品性夜夜夜 | 欧美日韩美女 | 亚洲 国产精品 日韩 | 美国一级片在线观看 | 欧美成人精品高清在线播放 | 亚洲天堂999| 欧美国产日韩精品 | 日皮视频在线免费观看 | 久久久久久久国产a∨ | 亚洲成人黄色片 | 中国一级片免费 | 国产精品毛片天天看片 | 日日碰狠狠添天天爽对白 | 未满十八18勿进黄网站免费看 | 成人免费a视频 | 91久久澡人人爽人人添 | 国产成人福利精品视频 | 91福利社在线观看 | 456亚洲人成影院在线观 | 欧美另类videos粗暴黑人 | 在线亚洲精品国产波多野结衣 | 18在线观看国内精品视频 | 日批免费 | 欧美在线天堂 | 午夜官网| 色婷婷婷丁香亚洲综合不卡 | 日本高清中文字幕一区二区三区 | 欧美亚洲综合另类成人 | 日韩欧美视频一区二区三区 | 国产亚洲人成网站在线观看不卡 | 久草久在线 | 青青青视频免费一区二区 | 欧美日本成人 | 黄色网址中文字幕 | 一级高清毛片 | 羞视频在线观看 | 美国十次综合 | 免费国产午夜高清在线视频 | 色综合久久精品中文字幕 | 欧美综合中文字幕久久 |