JUnit 4 7學習筆記 五 測試引擎綜述

2021-08-25 00:18:40 字數 2234 閱讀 2810

今天突然很想寫junit的學習筆記,所以找回以前的文章接著寫了:

自從junit上公升到4.1版本之後,開始全面支援jdk1.5的annotation。另外也重寫了它的測試引擎,實現了測試引擎的可定製話。當時給我乙個全新的測試體驗,從來沒想過原來寫測試用例也可以這麼好玩。

先看下面的例子:

package com.amway.training.junit.runners;

import org.junit.runner.description;

import org.junit.runner.runner;

import org.junit.runner.notification.runnotifier;

/*** a demo test runner

* @author jj**/

public class demorunner extends runner

@override

public description getdescription()

@override

public void run(runnotifier notifier)

}

然後寫乙個測試:

package com.amway.training.junit;

import org.junit.runner.runwith;

import com.amway.training.junit.runners.demorunner;

@runwith(demorunner.class)

public class testdemorunner

執行這個單元測試,你會發現我們執行了demorunner的run方法。說明我們現在可以改變測試執行的行為。

看了一下,發現4.7的這部分還是和4.1的時候發生了不少變化。首先,現在多了乙個parentrunner的類,它把runner類再重新封裝了一輪,並且讓新的預設引擎類都繼承於它。

[img]

上面的這些類就是4.7的runner引擎家族。junit38classrunner旁支是為了向下相容3.8版本的測試用例。

ignoredclassrunner會在測試引擎核心探測到測試檔案的class有定義@ignore註解的時候自動呼叫,它會跳過當前測試類的執行:

package com.amway.training.junit.runners;

import org.junit.ignore;

import org.junit.test;

@ignore

public class testignoredrunner

}

上例執行後,發覺執行結果並未對testmethod1進行執行。

[img]

而對於這部分的封裝junit是通過request機制來完成的。關於request的介紹我們會在日後介紹(遙遙無期,遙遙無期。。。 :wink: )。

然後errorreportingrunner是在org.junit.internal包裡面的,一般不會直接呼叫而是由系統的核心引擎去呼叫,所以它裡面沒有注釋。我們來看看其原始碼以進行runner的進一步學習:

首先,看其直接實現runner的兩個抽象方法:

@override

public description getdescription()

@override

public void run(runnotifier notifier)

然後可以知道其核心方法應該是runcause(throwable,runnotifier)

private void runcause(throwable child, runnotifier notifier)

從字面看,可以知道這個測試引擎的主要工作就是把異常轉換為failure測試結果顯示。以下是乙個使用的例子:

核心的blockjunit4classrunner就不說了,theories會在日後說,因為這個模組是junit開發團隊用來做實驗的,裡面的東西不適宜用於生產,不過適宜拿來玩:)

今天到此為止,先開個頭,下次再說parentrunner及下面還沒介紹到的子類(因為事忙,今天要寫到這裡了)

Junit4學習(五)Junit4測試套件

一,背景 1,隨著開發規模的深入和擴大,專案或越來越大,相應的我們的測試類也會越來越多 那麼就帶來乙個問題,假如測試類很多,就需要多次執行,造成測試的成本增加 此時就可以使用junit批量執行測試類的功能,junit test suite,測試套件 每次執行測試類,只需要執行一次測試套件類就可以執行...

JUNIT4 筆記(五) 測試套

測試套包含乙個或多個需要被一起執行的測試用例或測試套。測試套需要在類名前加 runwith suite.class 表示不使用預設的測試執行器,使用指定的測試執行器,在這裡suite.class就是指定的測試執行器。並用 suite.suiteclasses指定該測試套包含的其他測試用例或測試套。i...

學習筆記 五 引用型別

引用型別的值 物件 是引用型別的乙個例項。ecmascript提供了很多原生的引用型別 例如object 以便開發人員用以實現常見的計算任務。1.object型別 1 建立object例項的兩種方法 new object 和物件字面量表示法。一般常用物件字面量標識法 一是因為 量少,二是物件字面量可...