亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unit.txt

?? this unit test code
?? TXT
字號(hào):
Junit不錯(cuò)的入門實(shí)例及應(yīng)用經(jīng)驗(yàn)(轉(zhuǎn))2008-01-15 13:27Junit架構(gòu)
  下面以Money這個(gè)類為例進(jìn)行說明。 public class Money {
     private int fAmount;//余額
     private String fCurrency;//貨幣類型 

     public Money(int amount, String currency) {
         fAmount= amount;
         fCurrency= currency;
     }

     public int amount() {
         return fAmount;
     }

     public String currency() {
         return fCurrency;
     }
    
     public Money add(Money m) {//加錢
         return new Money(amount()+m.amount(), currency());
     }
    
     public boolean equals(Object anObject) {//判斷錢數(shù)是否相等
         if (anObject instanceof Money) {
             Money aMoney= (Money)anObject;
             return aMoney.currency().equals(currency())
                 && amount() == aMoney.amount();
         }
         return false;
     }    
}

  Junit本身是圍繞著兩個(gè)設(shè)計(jì)模式來設(shè)計(jì)的:命令模式和集成模式.

命令模式
  利用TestCase定義一個(gè)子類,在這個(gè)子類中生成一個(gè)被測(cè)試的對(duì)象,編寫代碼檢測(cè)某個(gè)方法被調(diào)用后對(duì)象的狀態(tài)與預(yù)期的狀態(tài)是否一致,進(jìn)而斷言程序代碼有沒有bug。
  當(dāng)這個(gè)子類要測(cè)試不只一個(gè)方法的實(shí)現(xiàn)代碼時(shí),可以先建立測(cè)試基礎(chǔ),讓這些測(cè)試在同一個(gè)基礎(chǔ)上運(yùn)行,一方面可以減少每個(gè)測(cè)試的初始化,而且可以測(cè)試這些不同方法之間的聯(lián)系。
  例如,我們要測(cè)試Money的Add方法,可以如下: public class MoneyTest extends TestCase { //TestCase的子類
     public void testAdd() { //把測(cè)試代碼放在testAdd中
         Money m12CHF= new Money(12, "CHF");   //本行和下一行進(jìn)行一些初始化
         Money m14CHF= new Money(14, "CHF");        
         Money expected= new Money(26, "CHF");//預(yù)期的結(jié)果
         Money result= m12CHF.add(m14CHF);     //運(yùn)行被測(cè)試的方法
         Assert.assertTrue(expected.equals(result));      //判斷運(yùn)行結(jié)果是否與預(yù)期的相同
     }
}
  如果測(cè)試一下equals方法,用類似的代碼,如下: public class MoneyTest extends TestCase { //TestCase的子類
     public void testEquals() { //把測(cè)試代碼放在testEquals中
         Money m12CHF= new Money(12, "CHF"); //本行和下一行進(jìn)行一些初始化
         Money m14CHF= new Money(14, "CHF"); 

         Assert.assertTrue(!m12CHF.equals(null));//進(jìn)行不同情況的測(cè)試
         Assert.assertEquals(m12CHF, m12CHF);
         Assert.assertEquals(m12CHF, new Money(12, "CHF")); // (1)
         Assert.assertTrue(!m12CHF.equals(m14CHF));
     }
}

  當(dāng)要同時(shí)進(jìn)行測(cè)試Add和equals方法時(shí),可以將它們的各自的初始化工作,合并到一起進(jìn)行,形成測(cè)試基礎(chǔ),用setUp初始化,用tearDown清除。如下: public class MoneyTest extends TestCase {//TestCase的子類
     private Money f12CHF;//提取公用的對(duì)象
     private Money f14CHF;    

     protected void setUp() {//初始化公用對(duì)象
         f12CHF= new Money(12, "CHF");
         f14CHF= new Money(14, "CHF");
     }
     public void testEquals() {//測(cè)試equals方法的正確性
         Assert.assertTrue(!f12CHF.equals(null));
         Assert.assertEquals(f12CHF, f12CHF);
         Assert.assertEquals(f12CHF, new Money(12, "CHF"));
         Assert.assertTrue(!f12CHF.equals(f14CHF));
     }
    
     public void testSimpleAdd() {//測(cè)試add方法的正確性
         Money expected= new Money(26, "CHF");
         Money result= f12CHF.add(f14CHF);
         Assert.assertTrue(expected.equals(result));
     }
}

  將以上三個(gè)中的任一個(gè)TestCase子類代碼保存到名為MoneyTest.java的文件里,并在文件首行增加 import junit.framework.*;,都是可以運(yùn)行的。關(guān)于Junit運(yùn)行的問題很有意思,下面單獨(dú)說明。
  上面為解釋概念“測(cè)試基礎(chǔ)(fixture)”,引入了兩個(gè)對(duì)兩個(gè)方法的測(cè)試。命令模式與集成模式的本質(zhì)區(qū)別是,前者一次只運(yùn)行一個(gè)測(cè)試。 
集成模式
  利用TestSuite可以將一個(gè)TestCase子類中所有test***()方法包含進(jìn)來一起運(yùn)行,還可將TestSuite子類也包含進(jìn)來,從而行成了一種等級(jí)關(guān)系。可以把TestSuite視為一個(gè)容器,可以盛放TestCase中的test***()方法,它自己也可以嵌套。這種體系架構(gòu),非常類似于現(xiàn)實(shí)中程序一步步開發(fā)一步步集成的現(xiàn)況。
  對(duì)上面的例子,有代碼如下: public class MoneyTest extends TestCase {//TestCase的子類
     ....
     public static Test suite() {//靜態(tài)Test
         TestSuite suite= new TestSuite();//生成一個(gè)TestSuite
         suite.addTest(new MoneyTest("testEquals")); //加入測(cè)試方法
         suite.addTest(new MoneyTest("testSimpleAdd"));
         return suite;
     }
}
  從Junit2.0開始,有列簡(jiǎn)捷的方法: public class MoneyTest extends TestCase {//TestCase的子類
     ....
     public static Test suite() {靜態(tài)Test
         return new TestSuite(MoneyTest.class); //以類為參數(shù)
     }
}
  TestSuite見嵌套的例子,在后面應(yīng)用案例中有。
   

4、測(cè)試代碼的運(yùn)行
  先說最常用的集成模式。
  測(cè)試代碼寫好以后,可以相應(yīng)的類中寫main方法,用java命令直接運(yùn)行;也可以不寫main方法,用Junit提供的運(yùn)行器運(yùn)行。Junit提供了textui,awtui和swingui三種運(yùn)行器。
  以前面第2步中的AllTests運(yùn)行為例,可有四種:

java junit.textui.TestRunner junit.samples.AllTests
java junit.awtui.TestRunner junit.samples.AllTests
java junit.swingui.TestRunner junit.samples.AllTests
java junit.samples.AllTests
  main方法中一般也都是簡(jiǎn)單地用Runner調(diào)用suite(),當(dāng)沒有main時(shí),TestRunner自己以運(yùn)行的類為參數(shù)生成了一個(gè)TestSuite.
  
  對(duì)于命令模式的運(yùn)行,有兩種方法。

靜態(tài)方法
TestCase test= new MoneyTest("simple add") {
public void runTest() {
testSimpleAdd();
}
};
動(dòng)態(tài)方法
TestCase test= new MoneyTest("testSimpleAdd");

  我試了一下,好象有問題,哪位朋友成功了,請(qǐng)指點(diǎn)我一下。確實(shí)可以。
import junit.framework.*; 

public class MoneyTest extends TestCase {//TestCase的子類
     private Money f12CHF;//提取公用的對(duì)象
     private Money f14CHF;   
     public MoneyTest(String name){
         super(name);
     }
     protected void setUp() {//初始化公用對(duì)象
         f12CHF= new Money(12, "CHF");
         f14CHF= new Money(14, "CHF");
     }
     public void testEquals() {//測(cè)試equals方法的正確性
         Assert.assertTrue(!f12CHF.equals(null));
         Assert.assertEquals(f12CHF, f12CHF);
         Assert.assertEquals(f12CHF, new Money(12, "CHF"));
         Assert.assertTrue(!f12CHF.equals(f14CHF));
     }
    
     public void testAdd() {//測(cè)試add方法的正確性
         Money expected= new Money(26, "CHF");
         Money result= f12CHF.add(f14CHF);
         Assert.assertTrue(expected.equals(result));
     }
//     public static void main(String[] args) {
//         TestCase test=new MoneyTest("simple add") {
//                 public void runTest() {
//                     testAdd();
//                 }
//             };
//         junit.textui.TestRunner.run(test);
//     }
     public static void main(String[] args) {
         TestCase test=new MoneyTest("testAdd");
         junit.textui.TestRunner.run(test);
     }
}

再給一個(gè)靜態(tài)方法用集成測(cè)試的例子: public static Test suite() {
     TestSuite suite= new TestSuite();
     suite.addTest(
         new testCar("getWheels") {
             protected void runTest() { testGetWheels(); }
         }
     ); 

     suite.addTest(
         new testCar("getSeats") {
             protected void runTest() { testGetSeats(); }
         }
     );
     return suite;
}



一些問題
  有人在實(shí)踐基礎(chǔ)上總結(jié)出一些非常有價(jià)值的使用技巧,我沒有經(jīng)過一一“測(cè)試”,暫列在此。

不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。 
不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法。所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。不知3.8中是不是還是如此,不過它提供的例子有一個(gè)是指定用VectorSuite的,如果不指定呢? 
避免編寫有副作用的TestCase。例如:如果隨后的測(cè)試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù)。簡(jiǎn)單的回滾就可以了。 
當(dāng)繼承一個(gè)測(cè)試類時(shí),記得調(diào)用父類的setUp()和tearDown()方法。 
將測(cè)試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.) 
測(cè)試類和測(cè)試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測(cè)試類名。 
確保測(cè)試與時(shí)間無(wú)關(guān),不要依賴使用過期的數(shù)據(jù)進(jìn)行測(cè)試。導(dǎo)致在隨后的維護(hù)過程中很難重現(xiàn)測(cè)試。 
如果你編寫的軟件面向國(guó)際市場(chǎng),編寫測(cè)試時(shí)要考慮國(guó)際化的因素。不要僅用母語(yǔ)的Locale進(jìn)行測(cè)試。 
盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡(jiǎn)潔。 
測(cè)試要盡可能地小,執(zhí)行速度快。 
把測(cè)試程序建立在與被測(cè)對(duì)象相同的包中 
在你的原始代碼目錄中避免測(cè)試碼出現(xiàn),可在一個(gè)源碼鏡像目錄中放測(cè)試碼 
在自己的應(yīng)用程序包中包含一個(gè)TestSuite測(cè)試類 
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网站最新地址| 欧美剧情片在线观看| 99re热这里只有精品视频| 精品视频在线看| 国产欧美一区二区精品仙草咪 | 国产91丝袜在线播放| 99re这里只有精品首页| 精品国产成人系列| 亚洲va欧美va人人爽午夜| 国产成人在线观看| 日韩免费电影一区| 午夜精品福利一区二区三区av | 久久久一区二区| 亚洲欧美日韩电影| 国产老妇另类xxxxx| 在线观看中文字幕不卡| 国产精品久久久久久久久果冻传媒| 蜜臀av性久久久久av蜜臀妖精| 一本大道久久a久久精品综合 | 欧美亚洲日本一区| 中文字幕五月欧美| 国产不卡在线一区| 国产午夜精品理论片a级大结局| 免费观看日韩电影| 欧美一级片在线| 亚洲成a天堂v人片| 欧美日韩一级视频| 亚洲欧美日韩一区二区| 岛国av在线一区| 国产校园另类小说区| 韩日欧美一区二区三区| 久久美女高清视频| 国产麻豆精品在线| 日本一区二区三区免费乱视频| 国产一区视频在线看| 久久亚洲精品国产精品紫薇| 美女脱光内衣内裤视频久久影院| 91精品国产高清一区二区三区蜜臀| 亚洲日本护士毛茸茸| 日本韩国视频一区二区| 亚洲精选在线视频| 欧美日本高清视频在线观看| 天天综合网 天天综合色| 在线播放视频一区| 免费在线观看日韩欧美| 欧美zozozo| 福利一区二区在线观看| 国产精品美女一区二区在线观看| gogo大胆日本视频一区| 夜夜嗨av一区二区三区网页| 欧美精品自拍偷拍| 精品一区二区三区视频在线观看| 久久精品一区二区三区不卡| 成人av在线网站| 亚洲成人黄色影院| 久久老女人爱爱| 91视频在线观看免费| 亚洲国产成人高清精品| 精品国产91九色蝌蚪| 99精品视频在线播放观看| 天堂资源在线中文精品| 精品日韩在线一区| 99久久精品免费看| 亚洲午夜免费福利视频| 久久夜色精品国产噜噜av| 91猫先生在线| 蜜桃av噜噜一区二区三区小说| 国产日韩亚洲欧美综合| 国产一二精品视频| 亚洲柠檬福利资源导航| 日韩欧美激情四射| 波波电影院一区二区三区| 偷拍一区二区三区| 国产精品电影一区二区| 欧美一级高清片| 97久久精品人人爽人人爽蜜臀 | 欧美综合天天夜夜久久| 日本不卡一区二区| 中文字幕视频一区| 精品粉嫩超白一线天av| 欧美色网站导航| 丁香婷婷综合色啪| 麻豆一区二区三| 一区二区三区欧美久久| 国产丝袜在线精品| 欧美一区二区三区影视| av网站免费线看精品| 精品一区二区三区在线观看国产| 亚洲综合激情小说| 国产精品美女久久久久av爽李琼 | 99久久久久免费精品国产 | 亚洲综合另类小说| 精品99一区二区| 成人动漫视频在线| 经典三级一区二区| 日韩电影在线一区二区| 亚洲欧美在线aaa| 中文一区二区完整视频在线观看| 欧美一二三区精品| 欧美日本视频在线| 欧美日韩国产另类不卡| 日本丰满少妇一区二区三区| 成人精品高清在线| 高清国产一区二区三区| 国产米奇在线777精品观看| 极品少妇一区二区三区精品视频| 五月天网站亚洲| 亚洲一区二区三区精品在线| 亚洲欧美激情插| 亚洲欧洲av另类| 亚洲精品日日夜夜| 亚洲日本护士毛茸茸| 综合久久久久综合| 亚洲日穴在线视频| 一区二区三区欧美日| 一区二区三区欧美亚洲| 亚洲国产一区视频| 亚洲图片欧美色图| 亚洲福中文字幕伊人影院| 亚洲第一成人在线| 琪琪一区二区三区| 六月丁香综合在线视频| 韩国毛片一区二区三区| 国产精品66部| 成人高清视频在线| 色综合久久久久| 欧美色电影在线| 538在线一区二区精品国产| 日韩一级黄色片| 久久久久久久久蜜桃| 日本一区二区电影| 亚洲免费色视频| 五月激情丁香一区二区三区| 另类小说图片综合网| 国产**成人网毛片九色| 色呦呦国产精品| 欧美伦理影视网| 国产日韩欧美不卡| 亚洲精品一二三区| 麻豆精品蜜桃视频网站| 成人午夜精品在线| 欧美少妇一区二区| 久久综合九色综合97婷婷女人| 国产亚洲午夜高清国产拍精品| 亚洲欧美怡红院| 日韩精品欧美精品| 成人午夜视频网站| 欧美美女喷水视频| 亚洲国产高清不卡| 亚洲国产精品久久久男人的天堂| 韩国精品主播一区二区在线观看| 9人人澡人人爽人人精品| 5858s免费视频成人| 国产精品午夜免费| 日产国产欧美视频一区精品| 成人午夜精品在线| 欧美日韩卡一卡二| 国产精品久久久久久久久免费相片| 亚洲午夜精品17c| 国产精品18久久久久久久网站| 色综合色综合色综合| 精品国内二区三区| 一二三四社区欧美黄| 国产成人三级在线观看| 欧美精品1区2区| 中文字幕视频一区| 国产激情91久久精品导航| 欧美丰满少妇xxxxx高潮对白 | 日本韩国欧美三级| 国产亚洲成年网址在线观看| 日韩国产欧美在线观看| 91蜜桃婷婷狠狠久久综合9色| 欧美成人福利视频| 偷拍一区二区三区| 色噜噜狠狠色综合欧洲selulu| 久久中文字幕电影| 日韩电影在线一区二区三区| 日本福利一区二区| 国产精品初高中害羞小美女文| 美女视频黄久久| 7777精品伊人久久久大香线蕉| 亚洲精品视频在线| 成人免费福利片| 日本一区二区三区久久久久久久久不| 日本欧洲一区二区| 欧美丰满少妇xxxxx高潮对白 | 色综合久久久久久久久久久| 欧美国产一区二区| 国产精品自在欧美一区| 欧美mv日韩mv| 久久精品国产亚洲高清剧情介绍| 欧美色图一区二区三区| 一区二区三区四区中文字幕| 波多野结衣在线一区| 日本一区二区免费在线 | 久久久久久一二三区| 精品一二三四在线| 欧美v日韩v国产v| 老司机午夜精品| 日韩欧美一二区|