新四季網

針對JavaME軟體中MIDlet主類的測試方法

2023-06-01 04:24:31 1

專利名稱:針對Java ME軟體中MIDlet主類的測試方法
技術領域:
本發明涉及一種嵌入式軟體測試方法,尤其涉及一種Java ME嵌入式軟體 中的MIDlet主類的測試方法。
背景技術:
Java ME (Java Micro Edition),也被稱作J2ME,是為機頂盒、行動電話 和PDA之類的嵌入式消費電子設備提供的高度優化的Java語言平臺。MIDlet是 一種運行在符合MIDP規範的設備上的Java ME應用程式,是當前主要的一種Java ME應用程式類型。目前支持Java的手機都支持MIDlet 。 一個MIDlet包括至少 一個派生自MIDP定義的抽象類javax. microedition. midlet. MIDlet的Java類, 我們稱此Java類為MIDlet主類。
xUnit是編寫軟體測試用例最常用的框架。實際上,它是適用於不同編程語 言和不同應用目的的一組測試框架,其中JUnit是應用最廣泛的基於xUnit的 Java測試框架,但是該框架不能直接用在Java ME環境,因為Java ME不支持 反射API,而反射API正是JUnit必需用到的。人們做了大量工作將JUnit移植 到Java ME領域,其中主要有J2MEUnit和JMUnit和Mobi 1 e JUnit三種,而JMUni t 更以它的高效、易用、簡單和開源等優良特性成為移動程序開發者的首選。
然而,目前基於這些流行的Java ME測試框架編寫的測試用例都存在一個 很難解決的問題,就是都無法對MIDlet主類進行完整測試。因為對MIDlet主 類實現測試,最大的障礙在於MIDlet實例化的問題,由於當前MIDP規範不允 許在應用程式中實例化MIDlet (只有AMS——虛擬機層面才有這樣的授權)。因 此當前Java ME程序的測試用例都是針對非MIDlet類建立,都在迴避MIDlet 主類測試的問題。因而也直接影響了 MIDlet應用程式測試的完整性。在當前最 流行的Java ME測試框架JMUnit中,實現一種對MIDlet主類進行完整測試的 方法具有積極的意義,也是急需解決的問題。

發明內容
本發明針對以上問題的提出,而研製一種針對Java ME嵌入式軟體中的 MIDlet主類的測試方法。它通過建立MIDlet主類的常規測試類與特殊測試類相結合的方式,實現對MIDlet主類的測試;特殊測試類是通過對MIDlet主類做原始碼插裝,實現保留MIDlet類身份的同時又成為一個TestCase類,將測試方法和原方法放在同一個類中,不需在測試方法中對被測類做實例化,而且可以方便地對私有方法寫測試,也可以實現對MIDlet主類中用戶界面相關的方法寫測試;通過定製TestSuite類,可以將MIDlet主類的各種測試類與其他類的測試類統一管理。其具體實現技術手段如下
一種Java ME嵌入式軟體中的MIDlet主類的測試方法,其特徵是,包括以下步驟
a、 首先,按JMUnit測試框架中建立常規TestCase類的方式,生成一個或多個針對MIDlet主類的常規TestCase類;
b、 然後,在對MIDlet主類做備份的情況下,將MIDlet主類做原始碼插裝,使之成為JMUnit框架下的特殊TestCase類;
c、 建立TestSuite類,將上述兩步驟建好的兩種TestCase類以及其他類的TestCase類加入TestSuite中統一管理;
d、 以啟動MIDlet的方式運行前面得到的TestSuite類進行測試。步驟a的實現方式如下步驟
(1) 要在TestCase類的構造方法中得到MIDlet主類的一個實例對象;
(2) TestCase類中的各個測試方法均要引用(1)中得到的實例對象對主類進行測試。
所述步驟b的具體步驟如下
(1) 將MIDlet主類做備份;
(2) 修改原MIDlet主類的父類為TestCase類;
(3) 在保留MIDlet主類的構造方法體內容的基礎上,在構造方法體內添加對父類TestCase類構造方法的調用;
(4) 將MIDlet主類中的生命周期相關的方法更名;
(5) 在MIDlet主類中添加各個測試方法。
所述步驟(5)中,在MIDlet主類中添加的測試方法如下
(1) 添加針對MIDlet主類中的原方法做測試的各個測試方法;
(2) 在遵守JMUnit框架的要求的條件下,實現測試執行的管理方法,並按常規方式實現setUp與tearDown方法;
步驟c中所述TestCase類加入TestSuite中,採用以JMUnit框架中的TestSuite類為父類,定製一個本測試方法中需要的TestSuite類,在該TestSuite類的構造方法體內使用add方法添加前面改造好的TestCase類的實例。
步驟c中所述TestCase類加入TestSuite中,還可以採用JMUnit中預設的TestSuite類,直接在JAD文件中增加JMUnitTestClasses屬性描述各個TestCase類。
本發明實現了一種可對MIDlet主類做完整測試的方法,能夠在當前流行的Java ME測試框架JMUnit中實現,不對JMUnit測試框架本身做改動,不影響對其他非MIDlet類做測試,並可將MIDlet主類的測試與非MIDlet類的測試統一管理,可與測試框架無縫集成。本方法可以作為當前測試框架的補充功能,實施簡便,可以方便地集成進Eclipse與Netbeans等流行的開發平臺中使用。


圖1是本發明的實施過程流程圖。
圖2是在一個在NetBeans平臺上的實施結果圖。
具體實施例方式
結合圖l所示流程圖,來說明本發明的具體實現過程。
首先,按JMUnit測試框架中建立常規TestCase類的方式,生成一個針對MIDlet主類的常規TestCase類。
(1) 要在TestCase類的構造方法中得到MIDlet主類的一個實例對象。由於JMUnit測試框架中的TestCase類為一個MIDlet,可以在一個MIDlet的構造方法中得到另一個MIDlet的實例,也只有這樣才能得到可在程序中操縱的一個MIDlet實例;
(2) TestCase類中的各個測試方法均要引用(1)中得到的實例對象對主類進行測試。
這種針對MIDlet主類的TestCase類可以對MIDlet主類中部分非私有方法做測試,可能會有某些簡單的MIDlet主類只需要用這種常規的TestCase類去測試即可。但是對一般的MIDlet主類的測試,往往還需要建立下面的特殊TestCase類,以實現對常規難測的方法寫測試。
然後,在對MIDlet主類做備份後,將MIDlet主類做原始碼插裝,使之成為JMUnit框架下的特殊TestCase類。實現既保留MIDlet類的身份又要變成一個TestCase類。
(1) 將MIDlet主類做備份。
(2) 採用向MIDlet主類直接注入代碼的方式,而不更改MIDlet主類名,是因為其他類中可能會用到MIDlet主類類名。在MIDlet主類中添加對jmunit類庫的導入;然後將MIDlet主類的父類由MIDlet修改為TestCase。由於TestCase類本身是一個MIDlet類,這樣也會保留原MIDlet主類的MIDlet身份特徵。
(3) 在保留MIDlet主類的構造方法體內容的基礎上,在構造方法體內添加對父類TestCase類構造方法的調用,實現本類中測試方法數目和測試類描述信息向測試框架的傳遞。只需在MIDlet主類的構造方法體內的首行調用super方法(將本類中測試方法數目和測試類的描述信息作為其參數)即可。
(4) 實現既保留原MIDlet主類中的生命周期相關的方法,又要遵從TestCase類的生命周期管理。採取將MIDlet主類中的生命周期相關的方法更名的方式,需要更名的生命周期方法包括startA卯、pauseA卯和destroyApp。
(5) 添加各個測試方法,實現測試執行的管理方法,並根據需要實現setUp方法與tearDown方法。直接在MIDlet主類中添加以下方法
(a) 添加針對MIDlet主類中的原方法做測試的各個測試方法,由於原方法和測試方法在同一個類中,不需在測試方法中對被測類做實例化。可以實現對MIDlet主類中私有方法、用戶界面相關的方法等這些難測的方法寫測試。
(b) 實現測試執行的管理方法(test方法,其為父類的抽象方法),只要遵守JMUnit框架的要求實現該方法即可。另外,根據需要,可按常規方式實現setUp與tearDown方法。
這樣就得到了由MIDlet主類改造來的特殊TestCase類。
然後,建立一個TestSuite類,將前面建好的兩種TestCase類加入TestSuite中。如一個Java ME項目中有多個MIDlet主類要測,均可按前面步驟得到相應的TestCase類加入到TestSuite中。另外,如果用戶還有其他非MIDlet主類的TestCase類,也可都加入到TestSuite中統一管理。可採用以下兩種方式之一。
(1)以JMUnit框架中的TestSuite類為父類,定製一個本測試方法中需要的TestSuite類,在該TestSuite類的構造方法體內使用add方法添加前面改造好的TestCase類的實例。注意只能在TestSuite類的構造方法體內完成以上TestCase的添加。
另外,需要在MIDlet套件屬性文件(清單文件和JAD文件)的MIDlet列表項中添加定製好的TestSuite類名。
(2)還可以採用JMUnit框架中預設的TestSuite類。需要在MIDlet套件屬性的MIDlet列表項中添力口加unit. framework, cldclx. TestSuite,並在JAD文件中增加一項屬性JMUnitTestClasses,其值為用空格分隔的多個完整的TestCase類名。
最後,在JMUnit框架中運行前面得到的TestSuite類。採用運行TestSuite類的方式而不是直接運行TestCase類的方式,是因為便於管理測試用例,可以將MIDlet主類的測試用例與其他類的測試用例統一管理運行,而且TestSuite運行測試與顯示結果的方式更適合測試多線程方法與用戶界面相關的方法。
本發明可以在各種常見的開發平臺中實施,圖l是本方法的實施流程圖。下面針對 一 個具體的 MIDlet 項目(含兩個 MIDlet 主類calculator. CalculatorM皿et與calculator. AnotherM皿et,並含有一個非MIDlet類math. Arithmetic),以Netbeans 5. x/6. x開發平臺(已安裝了支持Java ME的Mobility Pack插件)為例,並假定用戶選用CLDC11的JMUnit庫,詳細闡述一下如何用本發明方法在JMUnit框架下對以上三個類都做測試。為了方便,主要以CalculatorMIDlet為例做具體實施說明。
1、在MIDlet項目屬性/庫與資源項中添加了 CLDC11的JMUnit庫後,按JMUnit測試框架中建立常規TestCase類的方式,生成一個針對CalculatorMIDlet類的常規TestCase類,如CalculatorMIDletSimpleTest。用於對CalculatorMIDlet類中的4個簡單方法做測試。添加CalculatorMIDlet類型的類變量聲明,如 private CalculatorMIDlet instance;在CalculatorMIDletSimpleTest的構造方法中添加實例化CalculatorMIDlet類代碼。如
public CalculatorMIDletSimpleTest {
super (4, "CalculatorMIDlet Conventional Test〃); 〃本類中有4個測試方法instance=new calculator. CalculatorMIDlet ; 〃在此處獲取被測MIDlet的實例注只有在以上位置才能得到CalculatorMIDlet的一個實例;CalculatorMIDletTest類中的各個測試方法均要引用以上得到的instance,才能對CalculatorMIDlet中的方法進行測試。
以上常規 TestCase 類 CalculatorMIDletSimpleTest 只適合測CalculatorMIDlet中的4個簡單的公有方法,對於其餘的6個方法難以測試。因此還需建立特殊TestCase類
2、將MIDlet主類插裝成JMUnit框架下的特殊TestCase類。
(1) 對被測的MIDlet主類文件做備份,如對CalculatorMIDlet. Java文件做備份,備份文件名為CalculatorMIDlet. java-orig;
向CalculatorMIDlet類中添加對加unit類庫的導入代碼import jmunit. framework, cldcll.氺;
(2) 修改該類的父類由extends MIDlet改為extends TestCase。
(3) 由於本類中要建6個測試方法,故在CalculatorMIDlet類的構造方法體內的首行新增以下代碼即可
super(6, "CalculatorMIDlet Special Test");
(4) 將CalculatorMIDlet類中原startApp、 pauseApp、 destroyApp方法更名為orig$startApp、 orig$pauseApp、 orig$destroyApp。
(5) 在CalculatorMIDlet類中注入以下方法
(a)由於要對本例中的co腿andAction 、 origSstartA卯等6個方法各寫一個測試方法,在CalculatorMIDlet類中直接添加testcommandAction、testorigSstartApp等6個測試方法。比如原orig$startApp 0方法一部分內容如下
public void orig$startApp {count = 101;
getDisplay. setCurrent(get—calculatorForm);
建立它的一個測試方法為
public void testo:rig$sta:rtApp throws AssertionFailedException {System, out. println(〃startApp〃);int expectedCount = 101;
String expectedTitle 二 "Calculator";
orig$startApp;
assertEquals(expectedCount, count);
assertEquals(expectedTitle, getDisplay. getCurrent. getTitle);
原commandAction方法的一部分內容如下
public void commandAction(Command command, Displayable displayable) {
a二Integer. parselnt(get—field—a. getString); b=Integer. parselnt(get一field_b0. getString);
else if (command = addCommand) {
get—resultltem. setText(Integer. toString(Arithmetic, getlnstance. add(a, b))); getDisplay. setCurrent(get—calculatorForm);
建立它的一個測試方法為
public void testcommandAction throws AssertionFailedExc印tion { System, out. println(〃commandAction〃); String expectedResult = 〃256〃; get—field_a. setString(〃67〃); get_field_a. setString(〃189〃); commandAction (addCommaiid, calculatorForm); assertEquals(expectedResult, get—resultltem. getText);
其他測試方法此不贅述。
(b)實現父類中管理測試執行的抽象方法test,如下形式:
public void test(irrt testNumber) throws Throwable { switch(testNumber) {case O:testcommandAction;break; case l:testorig$startApp;break; case 2:testget—calculatorForm;break;
case 5:test get—resultltem ;break; default:break;
(c)根據需要實現setUp與tearDown方法。本例中這兩個方法暫為空。 這樣得到的改動後的CalculatorMIDlet類便是一個完整的JMUnit框架中 的TestCase類。
對於本例中的另一個MIDlet類calculator. AnotherMIDlet,由於裡面的方 法體都是非常簡單的公有方法,只需建立一個常規的測試類即可,如 calculator. AnotherMIDletTest (其中建立4個測試方法)。X寸於本例中的其他 類math. Arithmetic,按照常規方式生成TestCase類即可,比如生成的測試類 名為math. ArithmeticTest (其中建立5個測試方法)。
3.建立一個TestSuite類名為testsuite. MyTestSuite,其主體內容如下
import jmunit. framework, cldcll. TestSuite; public class MyTestSuite extends TestSuite{ public MyTestSuite {
super(〃My Test Suite〃);
add(new calculator. CalculatorMIDlet);
add(new calculator. CalculatorMIDletSimpleTest);
add(new calculator. AnotherMIDletTest);
add(new math. ArithmeticTest);
兩個MIDlet生成的TestCase類和非MIDlet生成的TestCase類都被加入 到MyTestSuite中。
在MIDlet套件屬性的MIDlet列表項中添加如下項
名稱MyTestSuite類testsuite. MyTestSuite 圖標可為空。或者,用戶可以選擇不定製以上MyTestSuite類,而是直接採用JMUnit框 架中預設的加unit. framework, cldcll. TestSuite類。只需要在MIDlet套件屬 性的MIDlet列表項中添加如下項
名稱MyTestSuite 類jmunit. framework, cldcll. TestSuite;
並在JAD屬性中增加如下一項
名稱JMUnitTestClasses 值以空格分開的本例中的四個TestCase類。 4.在NetBeans中運行本MIDlet項目,便可在手機模擬器啟動選項中出現 MyTestSuite項,如圖2(a)所示,選擇MyTestSuite啟動後,出現測試方法運 行前的界面,如圖2(b)所示,點擊"test"後,三個測試類(兩個MIDlet測試 類和一個非MIDlet測試類)中的19個測試方法全部被運行,運行結果如圖2(c)。 方法的實施過程可以方便地做成NetBeans的功能插件,便於用戶直接使用。另 外在其他開發平臺上的實施過程,與以上過程的闡述相類似。
以上所述,僅為本發明較佳的具體實施方式
,但本發明的保護範圍並不局 限於此,任何熟悉本技術領域的技術人員在本發明揭露的技術範圍內,根據本 發明的技術方案及其發明構思加以等同替換或改變,都應涵蓋在本發明的保護 範圍之內。
權利要求
1、一種Java ME嵌入式軟體中的MIDlet主類的測試方法,其特徵是,包括以下步驟a、首先,按JMUnit測試框架中建立常規TestCase類的方式,生成一個或多個針對MIDlet主類的常規TestCase類;b、然後,在對MIDlet主類做備份的情況下,將MIDlet主類做原始碼插裝,使之成為JMUnit框架下的特殊TestCase類;c、建立TestSuite類,將上述兩步驟建好的兩種TestCase類以及其他類的TestCase類加入TestSuite中統一管理;d、以啟動MIDlet的方式運行前面得到的TestSuite類進行測試。
2、 根據權利要求1所述的一種Java ME嵌入式軟體中的MIDlet主類的測試方法,其特徵在於步驟a的實現方式有如下步驟(1) 要在TestCase類的構造方法中得到MIDlet主類的實例對象;(2) TestCase類中的各個測試方法均要引用(1)中得到的實例對象對主類進行測試。
3、 根據權利要求1所述的一種Java ME嵌入式軟體中的MIDlet主類的測試方法,其特徵在於所述步驟b的具體步驟如下(1) 將MIDlet主類做備份;(2) 修改原MIDlet主類的父類為TestCase類;(3) 在保留MIDlet主類的構造方法體內容的基礎上,在構造方法體內添加對父類TestCase類構造方法的調用;(4) 將MIDlet主類中的生命周期相關的方法更名;(5) 在MIDlet主類中添加各個測試方法。
全文摘要
本發明公開了一種針對Java ME軟體中MIDlet主類的測試方法,它通過建立MIDlet主類的常規測試類與特殊測試類相結合的方式,實現對MIDlet主類的測試;特殊測試類是通過對MIDlet主類做原始碼插裝,可保留MIDlet類身份的同時又成為一個TestCase類,將測試方法和原方法放在同一個類中,方便地對私有方法寫測試,也可以實現對MIDlet主類中用戶界面相關的方法寫測試;定製TestSuite類,保證MIDlet主類的各種測試類與其他類的測試類統一管理。本發明首次實現了在JMUnit測試框架下對MIDlet主類做完整測試。適於在JavaME行動裝置應用程式測試中廣泛推廣。
文檔編號G06F11/36GK101510171SQ200910010899
公開日2009年8月19日 申請日期2009年3月25日 優先權日2009年3月25日
發明者杜振軍, 王文軍, 王正磊, 榮 陳 申請人:大連海事大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀