亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

notyy 的junit教程

2019-11-18 11:50:40
字體:
來源:轉載
供稿:網友

  Test a little ,code a little ,實戰junit
  
  Notyy的junit教程(一)
  
  有了junit,java程序的單元測試變成非常簡單的事。而在寫代碼前先寫測試這個似乎不可思議的規定也變的十分合理而且能有效的幫助程序的設計。
  
  下面是一個accountbean的例子,假設我們要實現一個帳戶治理程序,能夠向帳戶中增加、減少金額,還能在帳戶間轉帳。很顯然需要有一個account類,且慢寫代碼!在寫代碼前先寫測試,測試如何寫?假設你已經有這個account類,你希望如何使用它?顯然首先要初始化它,一個帳戶應該知道他的擁有者,和他現有的金額,那么他應該有個構建器形如:
  
  account(String Owner,double Balance);那就先寫測試這個構建器的代碼,如下:
  
  package account;
  
  
  
  import junit.framework.TestCase;
  
  
  
  public class AccountTest extends TestCase {
  
  PRivate Account AccountA;
  
  private Account AccountB;
  
  public AccountTest(String name) {
  
  super(name);
  
  }
  
  public static void main(String args[]) {
  
  junit.textui.TestRunner.run(AccountTest.class);
  
  }
  
  public void testAccount(){
  
  AccountA=new Account("notyy",100);
  
  AccountB=new Account("bricks",200);
  
  assertEquals("notyy",AccountA.Owner);
  
  assertEquals(100,AccountA.Balance,2);
  
  assertEquals("bricks",AccountB.Owner);
  
  assertEquals(200,AccountB.Balance,2);
  
  }
  
  }這段代碼無法編譯,因為沒有account類,我們來為account類寫個骨架,使他能夠編譯。代碼如下:
  
  package account;
  
  
  
  public class Account {
  
  private String Owner;
  
  private double Balance;
  
  public Account(String aOwner,double aBalance) {
  
  }
  
  }
  
  編譯后,寫個批命令來運行測試程序,如下:
  
  test.bat
  
  java -cp %classpath%;d:/javaprj/account/classes account.AccountTest
  
  別忘了把junit.jar包含在你的classpath里,junit的配置這里不再多說。
  
  運行test.bat得到如下結果
  
  FAILURES!!!
  
  Test Results:
  
  Run:1 Failure :1 Errors:0
  
  There was 1 failure
  
  1) testAccount(account.AccountTest) “eXPected . but was ”
  
  感覺如何,測試程序得出了我們預料的結果,因為構建器還沒有實現呢!
  
  現在我們來實現構建器
  
  public Account(String aOwner,double aBalance) {
  
  Owner=aOwner;
  
  Balance=aBalance;
  
  }
  
  得到結果:
  
  OK!
  
  測試通過,說明我們的構建器沒有問題!
  
  現在我們來refactoring一下,考慮上面的類有什么問題?owner和balance不應該能直接被外界訪問的吧。把他們改成兩個私有變量,然后用2個get方法來讀取他們。盡管xp explore上建議連getxxx和setxxx方法也該測試,我個人是覺得這樣過于麻煩的:)所以就省了。假如用get方法的話測試程序需要改變一下
  
  改成形如:assertEquals("notyy",AccountA.getOwner());就行了。
  
  為account類增加2個get方法:
  
  public String getOwner(){
  
  return Owner;
  
  }
  
  public double getBalance(){
  
  return Balance;
  
  }
  
  編譯,運行test.bat
  
  OK!一次通過。咱們繼續。Account類可以給自己的帳戶里加錢(credit),方法形如 Account.credit(double aMoney);
  
  先寫testcredit
  
  public void testCredit(){
  
  AccountA=new Account("notyy",100);
  
  AccountB=new Account("bricks",200);
  
  AccountA.credit(100);
  
  //100+100=200
  
  assertEquals(200,AccountA.getBalance(),2);
  
  AccountB.credit(150);
  
  //200+150=350
  
  assertEquals(350,AccountB.getBalance(),2);
  
  }
  
  無法編譯,因為account類沒有credit方法,咱們給他加個方法骨架:
  
  public void credit(double aMoney){
  
  }
  
  編譯通過,運行test.bat,失?。?
  
  “expected <200.0> but <100.0>”
  
  現在實現credit方法,如下:
  
  public void credit(double aMoney){
  
  Balance+=aMoney;
  
  }
  
  再次編譯運行,OK!(2 tests)
  
  哇,轉眼寫了這么長的文章了:)
  
  今天累了。明天再寫。
  
  繼續:)
  
  再來實現扣減方法,和增加幾乎一樣,原樣處理。
  
  先寫test
  
  public void testDiscount(){
  
  AccountA=new Account("notyy",100);
  
  AccountB=new Account("bricks",200);
  
  AccountA.discount(50);
  
  //100-50=50
  
  assertEquals(50.00,AccountA.getBalance(),2);
  
  AccountB.discount(120);
  
  //200-120=80
  
  assertEquals(80,AccountB.getBalance(),2);
  
  }
  
  然后實現
  
  public void discount(double aMoney){
  
  Balance-=aMoney;
  
  }
  
  最后是轉帳功能,轉帳是從一個帳戶轉到另一個帳戶。其實是調用一個帳戶的增加功能和另一個帳戶的減少功能。
  
  每個測試里都要建立accountA和accountB是不是很煩,junit考慮到了這一點,所以可以覆蓋testcase的setUp方法,在該方法內建立一些所有test都要用到的變量等。
  
  public void setUp(){
  
  AccountA=new Account("notyy",100);
  
  AccountB=new Account("bricks",200);
  
  }
  
  這樣,所有的測試方法中都不用再建立這兩個實例了。:)
  
  好,寫轉帳方法的測試
  
  public void testTransfer(){
  
  AccountA.transfer(AccountB,80.00);
  
  //100-80=20
  
  //200+80=280
  
  assertEquals(20.00,AccountA.getBalance(),2);
  
  assertEquals(280.00,AccountB.getBalance(),2);
  
  }
  
  然后建立transfer方法的框架,使它能編譯:
  
  public void transfer(Account aAccount,double aBalance){}
  
  測試時報失敗,expected “20” but was “100”
  
  然后填入實現 :
  
  public void transfer(Account aAccount,double aBalance){
  
  this.discount(aBalance);
  
  aAccount.credit(aBalance);
  
  }
  
  test OK!
  
  簡單的步驟,卻可使你對你實現的方法的正確性確信無疑,而且寫測試的過程也是設計的過程,假如在寫一個方法前,你連應該得到的輸出都想不明白,又怎么能動手去寫呢?
  
  誰說XP只要code,不要設計呢? :)
  
  
  
  好了,junit單元測試的第一個例子就寫到這吧。很簡單吧?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品ⅴa在线观看h| 亚洲精品视频在线观看视频| 一个人看的www欧美| 亚洲一区中文字幕| 中文字幕欧美亚洲| 国产精品成人va在线观看| 精品欧美aⅴ在线网站| 日韩精品中文字幕在线播放| 日韩精品电影网| 第一福利永久视频精品| 国产精品久久久久久一区二区| 国产精品美女在线| 精品国产91久久久| 亚洲国产精品福利| 久久成人一区二区| 911国产网站尤物在线观看| 日韩中文理论片| 国产精品三级美女白浆呻吟| 一区二区亚洲欧洲国产日韩| 激情懂色av一区av二区av| 成人av电影天堂| 亚洲福利在线看| 亚洲成人网久久久| 中文字幕日韩精品有码视频| 亚洲成人精品久久久| 国产第一区电影| 亚洲国产高潮在线观看| 久久在线视频在线| 全亚洲最色的网站在线观看| 欧美性xxxx极品hd欧美风情| 中国人与牲禽动交精品| 国产精品va在线播放| 国产亚洲视频在线观看| 亚洲电影av在线| 欧美激情免费视频| 国产成人jvid在线播放| 欧美激情性做爰免费视频| 亚洲最大福利视频| 亚洲一二三在线| 亚洲精品suv精品一区二区| 亚洲色图狂野欧美| 91精品国产九九九久久久亚洲| 国产精品久久久久久久久久尿| 亚洲国产婷婷香蕉久久久久久| 国产精品亚洲综合天堂夜夜| 亚洲国产精品久久精品怡红院| 欧美尺度大的性做爰视频| 欧美成人小视频| 91大神在线播放精品| 欧美www视频在线观看| 91久久综合亚洲鲁鲁五月天| 中文字幕欧美精品日韩中文字幕| 亚洲成人激情视频| 亚洲欧美日韩在线高清直播| 97视频com| 91网站免费看| 亚洲精品久久久久久久久| 在线观看欧美日韩| 欧美黑人一级爽快片淫片高清| 自拍亚洲一区欧美另类| 欧美韩日一区二区| 亚洲成人在线视频播放| 亚洲天堂第一页| 国产午夜精品免费一区二区三区| 亚洲欧洲xxxx| 国产视频精品va久久久久久| 国精产品一区一区三区有限在线| 中文国产成人精品| xvideos亚洲人网站| 91黑丝高跟在线| 91亚洲国产成人精品性色| 久久综合久中文字幕青草| 国产福利精品在线| 夜夜嗨av色综合久久久综合网| 亚洲人在线观看| 久久久精品国产| 91亚洲va在线va天堂va国| 国产精品欧美亚洲777777| 欧美在线视频在线播放完整版免费观看| 久久91精品国产| 亚洲最大激情中文字幕| 欧美性猛交xxxx富婆弯腰| 浅井舞香一区二区| 午夜精品久久久久久久99热| 黄色成人在线播放| 日韩精品免费在线观看| 97久久精品视频| 国产91免费看片| 欧美精品电影免费在线观看| 欧美激情精品久久久久久变态| 久久精品视频播放| 久久综合色影院| 精品美女国产在线| 91精品国产色综合久久不卡98口| 亚洲精品国产成人| 欧美成人免费网| 中文字幕亚洲欧美| 国产精品久久久久久久久| 欧美在线欧美在线| 亚洲综合av影视| 中国日韩欧美久久久久久久久| 性色av一区二区三区红粉影视| 综合国产在线视频| 国产日韩欧美视频在线| 日韩三级影视基地| 久久久午夜视频| 九九综合九九综合| 久久综合88中文色鬼| 国产精品久久久久久亚洲调教| 久久久精品久久久久| 日韩av网站在线| 欧美夫妻性生活xx| 97在线看免费观看视频在线观看| 国产大片精品免费永久看nba| 欧美一区二粉嫩精品国产一线天| 这里只有精品视频| 欧美精品一区二区三区国产精品| 国产精品久久久久久久久久99| 久久久久久久网站| 久久福利视频网| 欧洲精品在线视频| 少妇高潮久久久久久潘金莲| 在线亚洲男人天堂| 欧美疯狂xxxx大交乱88av| 国产精品视频自在线| 尤物99国产成人精品视频| 在线视频一区二区| 欧美精品情趣视频| 亚洲欧美中文日韩在线| 国产一区二区三区在线看| 国产精品极品美女粉嫩高清在线| 日本91av在线播放| 欧美成人精品在线观看| 欧美最顶级丰满的aⅴ艳星| 国产有码一区二区| 久操成人在线视频| 日韩最新免费不卡| 国内精品模特av私拍在线观看| 欧美激情乱人伦| 俺去了亚洲欧美日韩| 日本欧美在线视频| 久久中文精品视频| 欧美极品在线视频| 欧美理论片在线观看| 亚洲的天堂在线中文字幕| 国产精品91在线| 欧美丝袜一区二区| 最好看的2019年中文视频| 国产成人精品免费视频| 日韩免费精品视频| 欧美乱人伦中文字幕在线| 精品国产91久久久| 91精品国产乱码久久久久久久久| 亚洲黄色在线观看| 亚洲天堂av综合网| 77777亚洲午夜久久多人| 久久久久久亚洲| 亚洲欧洲成视频免费观看| 亚洲欧美成人网| 欧美一级免费视频| 国产成人啪精品视频免费网| 亚洲第一福利在线观看| 国产亚洲欧美aaaa| 一个人看的www久久|