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 作為最著名的單元測試...