可以用main函數(shù)和JUnit來(lái)寫(xiě)測(cè)試代碼。main是最早使用的,但是現(xiàn)在更流行的測(cè)試工具是JUnit。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),茂名網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:茂名等地區(qū)。茂名做網(wǎng)站價(jià)格咨詢:13518219792
JUnit是一個(gè)Java語(yǔ)言的單元測(cè)試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個(gè)。 JUnit有它自己的JUnit擴(kuò)展生態(tài)圈。多數(shù)Java的開(kāi)發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測(cè)試的工具。
下面是一些具體的編寫(xiě)測(cè)試代碼的技巧或較好的實(shí)踐方法:
1. 不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法。所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。
3. 避免編寫(xiě)有副作用的TestCase。例如:如果隨后的測(cè)試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù)。簡(jiǎn)單的回滾就可以了。
4. 當(dāng)繼承一個(gè)測(cè)試類時(shí),記得調(diào)用父類的setUp()和tearDown()方法。
5. 將測(cè)試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)
6. 測(cè)試類和測(cè)試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測(cè)試類名。
7. 確保測(cè)試與時(shí)間無(wú)關(guān),不要依賴使用過(guò)期的數(shù)據(jù)進(jìn)行測(cè)試。導(dǎo)致在隨后的維護(hù)過(guò)程中很難重現(xiàn)測(cè)試。
8. 如果你編寫(xiě)的軟件面向國(guó)際市場(chǎng),編寫(xiě)測(cè)試時(shí)要考慮國(guó)際化的因素。不要僅用母語(yǔ)的Locale進(jìn)行測(cè)試。
9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡(jiǎn)潔。
10.測(cè)試要盡可能地小,執(zhí)行速度快。
11.不要硬性規(guī)定數(shù)據(jù)文件的路徑。
12.利用Junit 的自動(dòng)異常處理書(shū)寫(xiě)簡(jiǎn)潔的測(cè)試代碼
事實(shí)上在Junit 中使用try-catch 來(lái)捕獲異常是沒(méi)有必要的,Junit 會(huì)自動(dòng)捕獲異常。那些沒(méi)有被捕獲的異常就被當(dāng)成錯(cuò)誤處理。
13. 充分利用Junit 的assert/fail 方法
assertSame()用來(lái)測(cè)試兩個(gè)引用是否指向同一個(gè)對(duì)象
assertEquals()用來(lái)測(cè)試兩個(gè)對(duì)象是否相等
14. 確保測(cè)試代碼與時(shí)間無(wú)關(guān)
15. 使用文檔生成器做測(cè)試文檔。
你這說(shuō)的太籠統(tǒng)了,應(yīng)該具體些。
有了Java代碼之后
1、可以在代碼中寫(xiě)些測(cè)試的方法,把你想要驗(yàn)證的東西,輸出看一下。
2、可以用Debug的形式,跟蹤代碼執(zhí)行,驗(yàn)證程序的邏輯是否正確。
3、利用JUnit寫(xiě)斷言,測(cè)試結(jié)果
單元測(cè)試是我們?cè)谲浖_(kāi)發(fā)過(guò)程中經(jīng)常用到的一種軟件測(cè)試的方法,而今天我們就一起來(lái)了解一下,一個(gè)好的單元測(cè)試都是如何來(lái)編輯完成的。
1.使用框架來(lái)用于單元測(cè)試
Java提供了若干用于單元測(cè)試的框架。TestNG和JUnit是流行的測(cè)試框架。JUnit和TestNG的一些重要功能:
易于設(shè)置和運(yùn)行。
支持注釋。
允許忽略或分組并一起執(zhí)行某些測(cè)試。
支持參數(shù)化測(cè)試,即通過(guò)在運(yùn)行時(shí)指定不同的值來(lái)運(yùn)行單元測(cè)試。
通過(guò)與構(gòu)建工具,如Ant,Maven和Gradle集成來(lái)支持自動(dòng)化的測(cè)試執(zhí)行。
EasyMock是一個(gè)模擬框架,是單元測(cè)試框架,如JUnit和TestNG的補(bǔ)充。EasyMock本身不是一個(gè)完整的框架。它只是添加了創(chuàng)建模擬對(duì)象以便于測(cè)試的能力。例如,我們想要測(cè)試的一個(gè)方法可以調(diào)用從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測(cè)試我們意向的方法,而不必?fù)?dān)心數(shù)據(jù)庫(kù)訪問(wèn)。
2.謹(jǐn)慎使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)!
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)是一個(gè)軟件開(kāi)發(fā)過(guò)程,在這過(guò)程中,在開(kāi)始任何編碼之前,我們基于需求來(lái)編寫(xiě)測(cè)試。由于還沒(méi)有編碼,測(cè)試初會(huì)失敗。然后寫(xiě)入小量的代碼以通過(guò)測(cè)試。然后重構(gòu)代碼,直到被優(yōu)化。
目標(biāo)是編寫(xiě)覆蓋所有需求的測(cè)試,而不是一開(kāi)始就寫(xiě)代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因?yàn)樗鼘?dǎo)致簡(jiǎn)單的模塊化代碼,且易于維護(hù)。總體開(kāi)發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測(cè)試被創(chuàng)建作為TDD方法的副產(chǎn)品。
然而,TDD可能不適合所有的情況。在設(shè)計(jì)復(fù)雜的項(xiàng)目中,專注于簡(jiǎn)單的設(shè)計(jì)以便于通過(guò)測(cè)試用例,而不提前思考可能會(huì)導(dǎo)致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫(kù)一起工作的應(yīng)用程序交互的系統(tǒng)。另外,測(cè)試需要隨著代碼的改變而更新。
因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項(xiàng)目的性質(zhì)采取措施。
3.測(cè)量代碼覆蓋率
代碼覆蓋率衡量(以百分比表示)了在運(yùn)行單元測(cè)試時(shí)執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測(cè)到的錯(cuò)誤的幾率要低,因?yàn)槠涓嗟脑创a在測(cè)試過(guò)程中被執(zhí)行。云南電腦培訓(xùn)發(fā)現(xiàn)測(cè)量代碼覆蓋率的一些佳做法包括:
使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測(cè)試質(zhì)量,因?yàn)檫@些工具可以指出未經(jīng)測(cè)試的代碼區(qū)域,讓你能夠開(kāi)發(fā)開(kāi)發(fā)額外的測(cè)試來(lái)覆蓋這些領(lǐng)域。
1、Jasmine
Jasmine是一個(gè)行為驅(qū)動(dòng)的測(cè)試開(kāi)發(fā)框架,用于對(duì)JavaScript代碼進(jìn)行測(cè)試。它不依賴其它任何JavaScript框架,也不需要DOM。它的語(yǔ)法簡(jiǎn)潔、明確,寫(xiě)測(cè)試非常容易。
2、Mocha
Mocha是一個(gè)功能豐富的JavaScript測(cè)試框架,既運(yùn)行于Node.js環(huán)境中,也可以運(yùn)行于瀏覽器環(huán)境中。Mocha以串行方式運(yùn)行測(cè)試,能做出靈活而準(zhǔn)確的報(bào)告,也能將測(cè)試中未捕捉的異常映射到正確的測(cè)試用例。
3、Chai
Chai是個(gè)支持BDD/TDD的庫(kù),可用于node和瀏覽器,可配合任何JavaScript測(cè)試框架使用。
4、QUnit
QUnit是個(gè)功能強(qiáng)大又易于使用的JavaScript單元測(cè)試框架。jQuery、jQueryUI和jQueyMobile項(xiàng)目都使用這個(gè)框架,它能測(cè)試普通的JavaScript代碼。
5、Sinon
Sinon.JS為JavaScript提供了獨(dú)立的spies、stubs和mocks[譯者注:Spy、Stub和Mock都是測(cè)試專用名詞,Stub常被翻譯為樁,spies是Spy的復(fù)數(shù)形式,是一種可以監(jiān)視方法、調(diào)用和參數(shù)的技術(shù)]。它不依賴任何東西,可以配合任何單元測(cè)試框架工作。
6、Karma
Karma是針對(duì)連通瀏覽器的一個(gè)框架無(wú)關(guān)測(cè)試運(yùn)行器。每一個(gè)測(cè)試結(jié)果對(duì)應(yīng)每個(gè)瀏覽器,它的測(cè)試和顯示都是通過(guò)命令行暴露給開(kāi)發(fā)者的,這樣他們就可以看到瀏覽器測(cè)試的通過(guò)或失敗。
7、Selenium
Selenium有一個(gè)簡(jiǎn)單的目標(biāo):就是自動(dòng)化瀏覽器。它主要用于自動(dòng)化測(cè)試web應(yīng)用程序,但是只是很簡(jiǎn)單地考慮到了基于網(wǎng)絡(luò)的管理任務(wù)。
8、WebdriverIO
WebdriverIO允許用戶僅添加幾行代碼就可以控制瀏覽器或移動(dòng)應(yīng)用程序,使測(cè)試代碼更簡(jiǎn)單、簡(jiǎn)潔、易讀。集成的TestRunner同樣允許你以同步的方式調(diào)用異步命令,這樣你不需要關(guān)心如何處理Promise以避免競(jìng)態(tài)條件。此外,它取消了所有的繁瑣的設(shè)置工作,并且會(huì)為您管理的Selenium會(huì)話。
9、Nightwatch
Nightwatch.js是一個(gè)易于使用的Node.js,它是為基于瀏覽器的app和網(wǎng)站設(shè)計(jì)的終端到終端(E2E)的測(cè)試方法。它使用強(qiáng)大的W3CWebDriverAPI,用于在DOM元素上執(zhí)行命令和斷言。
10、PhantomCSS
PhantomCSS獲得CasperJS捕獲的屏幕截圖,并使用Resemble.js將其與基準(zhǔn)圖進(jìn)行對(duì)比,以測(cè)試RGB像素差異。java課程發(fā)現(xiàn)PhantomCSS然后生成圖像差異對(duì)比,用于幫助您找到原因。
11、PhantomFlow
PhantomFlow使用決策樹(shù)提供UI測(cè)試方案。針對(duì)PhantomJS,CasperJS和PhantomCSS的NodeJS包裝器——PhantomFlow能夠流暢地在代碼中描述用戶流程,同時(shí)生成用于可視化的結(jié)構(gòu)化樹(shù)數(shù)據(jù)。
在軟件開(kāi)發(fā)過(guò)程中,每個(gè)單元的運(yùn)行都是非常關(guān)鍵的,并且直接關(guān)系到后期程序員的運(yùn)行。那么在進(jìn)行軟件開(kāi)發(fā)過(guò)程中,經(jīng)常使用到的單元測(cè)試方法有哪些呢,一個(gè)好的單元測(cè)試是如何進(jìn)行實(shí)現(xiàn)的?下面云南電腦培訓(xùn)為大家介紹進(jìn)行Java單元測(cè)試的具體方法。
1、使用框架進(jìn)行單元測(cè)試
Java能夠提供單元測(cè)試方法的框架,在測(cè)試過(guò)程中,測(cè)試NG和JUnit是現(xiàn)在流行的測(cè)試框架。JUnit和TestNG框架測(cè)試有幾個(gè)重要功能:設(shè)置和運(yùn)行很容易;允許忽略或分組,并一起運(yùn)行多個(gè)測(cè)試;支持參數(shù)化測(cè)試,并且云南IT培訓(xùn)發(fā)現(xiàn)能夠通過(guò)在運(yùn)行時(shí)指定不同的值來(lái)執(zhí)行單元測(cè)試。
2、謹(jǐn)慎使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是一個(gè)軟件開(kāi)發(fā)的過(guò)程。在整個(gè)開(kāi)發(fā)過(guò)程中,在開(kāi)始編碼的時(shí)候,應(yīng)該根據(jù)程序的需求進(jìn)行編程測(cè)試。但是昆明IT培訓(xùn)發(fā)現(xiàn)由于這個(gè)時(shí)候還沒(méi)有進(jìn)行編程,所以初次測(cè)試會(huì)面臨失敗,只需要寫(xiě)入少量的代碼就能通過(guò)測(cè)試,進(jìn)行重置代碼。
3、測(cè)試代碼的覆蓋率
代碼覆蓋率是以百分比測(cè)定執(zhí)行單元測(cè)試時(shí)進(jìn)行的代碼量。通常,高覆蓋率的代碼包含未被檢測(cè)出的錯(cuò)誤的概率較低,因?yàn)楦嗟脑创a在測(cè)試中被執(zhí)行。測(cè)試代碼覆蓋率的工具有:Clover,Corbetura,JaCoCo。使用工具測(cè)試能夠更好的提高測(cè)試質(zhì)量。
4、將測(cè)試數(shù)據(jù)外部?jī)?yōu)化
在JUnit4之前,測(cè)試用例執(zhí)行的數(shù)據(jù)必須被測(cè)試用例硬編碼,這會(huì)引起限制。為了使用不同的數(shù)據(jù)執(zhí)行測(cè)試,必須修正測(cè)試用例代碼。但是,昆明電腦培訓(xùn)認(rèn)為JUnit4以及TestNG支持外部化測(cè)試數(shù)據(jù),無(wú)需變更源代碼,就可以對(duì)不同的數(shù)據(jù)組執(zhí)行測(cè)試用例。
給你個(gè)例子:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MouseDemo
{
//定義該圖形中所需的組件的引用
private Frame f;
//方法
MouseDemo()//構(gòu)造方法
{
madeFrame();
}
public void madeFrame()
{
f = new Frame("Test Frame");
//對(duì)Frame進(jìn)行基本設(shè)置。
f.setBounds(300,100,600,500);//對(duì)框架的位置和大小進(jìn)行設(shè)置
f.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));//設(shè)計(jì)布局
//加載一下窗體上的事件
myEvent();
//顯示窗體
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()//窗口監(jiān)聽(tīng)
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
f.addMouseListener(new MouseAdapter()//鼠標(biāo)監(jiān)聽(tīng)
{
private int count = 1;
private int mouseCount = 1;
public void mouseClicked(MouseEvent e) {
if (e.getButton()==e.BUTTON1)
{//點(diǎn)擊鼠標(biāo)左鍵
System.out.println("鼠標(biāo)左鍵點(diǎn)擊了!!!");
}
}
});
}
public static void main(String[] agrs)
{
new MouseDemo();
}
}
當(dāng)前名稱:代碼檢測(cè)java,代碼檢測(cè)平臺(tái)
文章地址:http://chinadenli.net/article24/hdosje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、定制開(kāi)發(fā)、網(wǎng)站策劃、做網(wǎng)站、建站公司、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)