程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java ME下的單元測試開發之JMUnit篇

Java ME下的單元測試開發之JMUnit篇

編輯:JAVA編程入門知識

        摘要

        不能因為Java Micro Edition缺乏反射能力就說Java Micro Edition開發者無法利用JUnit風格測試的優點。其實,借助於具有JUnit風格的其它一些框架和工具,Java ME開發人員仍然能夠改進Java ME應用程序的開發質量。本系列文章(兩篇)正是想具體探討J2MEUnit和JMUnit這兩個開源框架在Java ME單元測試開發中的應用。
  
  一、 引言
  
  如今,JUnit測試正在逐漸成為大多數Java標准版(SE)和企業版(EE)應用程序開發中的基本組成部分-對於那些積極擁護測試驅動開發者尤其如此。Kent Beck和Eric Gamma的最初的Smalltalk框架變得如此流行和成功,以至於它被移植到很多編程語言中,包括Ada(AUnit)、C#(NUnit)、Python(PyUnit),甚至還有Fortran(fUnit)。實踐證實,Java的JUnit是所有的單元測試框架中最成功的並且已經派生出許多JUnit"變種"(以各種"擴展"的形式),這些框架最終幫助在從多線程Java應用程序到高級企業Java應用程序的主流開發中實現單元測試。
  
  然而,使用JUnit或找到一種JUnit擴展用於Java Micro Edition開發一直以來卻是很難的事情。須知,JUnit框架依靠於Java反射API。由於Java ME環境中還不支持反射API,所以,典型的很大程度上依靠於反射的JUnit工具還不能幫助進行Java ME開發。盡管如此,已經出現兩個專門針對設備應用程序開發者構建的Java ME JUnit擴展。值得注重的是,隨著NetBeans和NetBeans Mobility 5.5的發行,NetBeans和NetBeans Mobility Pack正在計劃合並一個Java ME JUnit風格的框架。這種新版本的IDE將以一種更為利索的方式在你的Java ME應用程序中加入單元測試。
  
  本文將通過使用Java ME JUnit框架向你介紹JUnit測試;通過本文,你會發現,如何獲取這些工具,如何使用它們進行測試以及如何使用它們來構建質量更好的軟件。
  
  二、 獲取Java ME單元測試框架
  
  如今,市場上存在兩個可用的JavaME JUnit測試框架,它們是J2MEUnit和JMUnit。這兩個工程都是可自由下載的開源框架,你可以從SourceForge.net上下載一個打包文件。
  
  然而,這兩個開源工程的工程主管(Elmar Sonnenschein和Brunno Silva,分別維護J2MEUnit和JMUnit),正在計劃把這兩個框架合並為一個。新的工程將在J2MEUnit工程基礎上得到進一步鞏固。根據Sonnenschein本人的說法,"因為更多的現有用戶的工程都是基於SourceForge上的J2MEUnit框架;所以,我們計劃基於Brunno的JMUnit 2.0創建一個J2MEUnit 2.0發行版本。"Silva在一次最近的新聞發布會上聲稱在今年年底可能無法完成產品的合並和一個2.0版本的發行。Silva進一步建議說,新的工程"不想破壞這兩個框架的當前用戶的原有代碼,因此,原始代碼會繼續存在,只是不再建議使用。新的單元框架應該展現出兩個框架-JMUnit和J2MEUnit-各自的特色。"
  
  三、 一個簡單的示例應用程序
  
  在分析各種單元測試框架之前,你需要一些簡單的代碼以備測試之用。在這個例子中,下面這個簡單的Conversion類能夠用於創建並測試Java ME單元測試。
  
   public class DistanceConversion {
   public static int feetToMeters(int ft){
  return (ft * 3048)/10000;
   }
   public static int metersToFeet(int meters){
  return (meters*3281)/1000;
   }
   public static int milesToKM(int miles){
  return (miles*1609)/1000;
   }
   public static int kmToMiles(int km){
  return (km*6214)/10000;
   }
  }
  public class TemperatureConversion {
   public static float fahrenheitToCelsius (float degrees){
  return ((degrees-32)/9)*5;
   }
   public static float celsiusToFahrenheit (float degrees){
  return ((degrees * 9)/5)+32;
   }
   public static boolean isHotter (float degFaren, float degCel){
  return ((fahrenheitToCelsius(degFaren))-degCel) > 0;
   }
   public static boolean isCooler (float degFaren, float degCel){
  return ((fahrenheitToCelsius(degFaren))-degCel) < 0;
   }
  }
  注重,這段代碼中使用了CLDC 1.1原始的浮點原型。為了使該代碼能夠運行於CLDC 1.0環境下,該代碼需要使用整數原型來取代浮點原型,如下所示。另外,本文提供的下載zip源文件中也提供了一個針對CLDC 1.1和CLDC1.0的所有的這些代碼和測試類的副本。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved