JUnit原始碼解讀

2021-08-21 01:40:12 字數 2341 閱讀 1242

junit 是由 erich gamma 和 kent beck 編寫的乙個開源的單元測試框架。它屬於白盒測試,只要將待測類繼承 testcase 類,就可以利用 junit 的一系列機制進行便捷的自動測試了。

junit 的設計精簡,易學易用,但是功能卻非常強大,這歸因於它內部完善的**結構。 erich gamma 是著名的 gof 之一,因此 junit 中深深滲透了擴充套件性優良的設計模式思想。 junit 提供的 api 既可以讓您寫出測試結果明確的可重用單元測試用例,也提供了單元測試用例成批執行的功能。在已經實現的框架中,使用者可以選擇三種方式來顯示測試結果,並且顯示的方式本身也是可擴充套件的。

junit 的完整生命週期分為 3 個階段:初始化階段、執行階段和結果捕捉階段。下面就從這三個階段詳細分析源**。

初始化階段

初始化的入口有三個,分別是junit.textui.testrunner,junit.swingui.testrunner,junit.awtui.testrun

ner,他們的不同就是ui不同,下面以textui為例:

public

static

void

main(string args)

system.exit(success_exit);

} catch (exception e)

}public testresult start(string args) throws exception

//初始化

test suite = gettest(testcase);

return dorun(suite, wait);

} catch (exception e)

}

start函式所做的事就是將傳入的引數中的類名提取出來(也就是你要測試哪個類)存在testcase中,並且根據你傳入的引數確定執行模式,拿到testcase後,就呼叫gettest方法。

public test gettest(string suiteclassname)  catch (exception e)
如果這裡沒有通過getmethod方法拿到suitemethod的話,就會呼叫testsuite構造器

public

testsuite(final class> theclass)

private

void

addtestsfromtestcase(final class> theclass)

superclass = superclass.getsuperclass();

}if (ftests.size() == 0)

}

用迭代的形式從被測試的類開始,到被測試的類繼承的testcase,最後到object類,這個迴圈從這幾個類中所有符合條件的測試方法加入到名為names的list中。

private void addtestmethod(method m, listnames, class> theclass) 

//判斷是否是public方法

if (!ispublictestmethod(m))

點進addtestmethod方法中,可以發現,加入的方法,第一必須是public的,第二簽名必須以test開頭,形如test***()

測試執行階段

public testresult dorun(test suite, boolean wait)
初始化之後,開始執行

public

void

run(testresult result)

runtest(each, result);}}

迴圈呼叫每乙個測試的方法

runmethod.invoke(this);
最終由這行**呼叫了被測試方法

結果捕捉階段

public

void

runprotected(final test test, protectable p) catch (assertionfailederror e) catch (threaddeath e) catch (throwable e)

}

將錯誤與失敗加入鍊錶中,然後由fprinter列印在控制台上,這裡使用的是觀察者模

JUnit 4 8 原始碼解讀2

在junit 4.x的原始碼中,增加了org.junit這個大的package,入口也由junit.textui.testrunner換成了org.junit.runner.junitcore。1.在入口方法中,新建了乙個junitcore,呼叫了runmain方法。public static vo...

JUnit原始碼分析

junit junit原始碼學習和經驗分享。源 裡沒有密碼,好多開源框架都出自大牛大師之手,是學習的好例子,可惜自己沒啥耐心去看,網上搜尋到牛人解析,記錄下來,學習學習。深入junit原始碼之runner 深入junit原始碼之statement 深入junit原始碼之rule 深入junit原始碼...

JUnit原始碼分析(一)

一 引子junit 原始碼是我仔細閱讀過的第乙個開源專案原始碼。閱讀高手寫的 能學到一些好的程式設計風格和實現思路,這是提高自己程式設計水平行之有效的方法,因此早就想看看這些赫赫有名的框架是怎麼回事了。今天就拿最簡單的 junit 下手,也算開始自己的原始碼分析之路。junit 作為最著名的單元測試...