精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在Android上實現Junit單元測試的四部曲

移動開發 Android
本文講述在Android上實現Junit單元測試,利用JUnit等單元測試框架進行單元測試對于Java程序員并不陌生,利用這些非常有效的工具,使得代碼的質量得到有效的監控和維護。

我們曾經和大家探討過全面剖析Java ME單元測試理念,其實在Android上實現JUnit單元測試也不是很困難,主要是在配置文件和測試環境上將花費很長時間,下面從四步簡單講一下在Android上實現Junit單元測試。

第一步:新建一個TestCase,記得要繼承androidTestCase,才能有getContext()來獲取當前的上下文變量,這在Android測試中很重要的,因為很多的Android api都需要context。

Java代碼

  1.    
  2. public class TestMath extends AndroidTestCase {    
  3.         
  4.     private int i1;    
  5.     private int i2;    
  6.     static final String LOG_TAG = "MathTest";    
  7.         
  8.     @Override    
  9.     protected void setUp() throws Exception {    
  10.         i1 = 2;    
  11.         i2 = 3;    
  12.     }    
  13.         
  14.     public void testAdd() {    
  15.         assertTrue("testAdd failed", ((i1 + i2) == 5));    
  16.     }    
  17.         
  18.     public void testDec() {    
  19.         assertTrue("testDec failed", ((i2 - i1) == 1));    
  20.     }    
  21.     
  22.     @Override    
  23.     protected void tearDown() throws Exception {    
  24.         super.tearDown();    
  25.     }    
  26.     
  27.     @Override    
  28.     public void testAndroidTestCaseSetupProperly() {    
  29.         super.testAndroidTestCaseSetupProperly();    
  30.         //Log.d( LOG_TAG, "testAndroidTestCaseSetupProperly" );    
  31.     }    
  32.     
  33. }    

第二步:新建一個TestSuit,這個就繼承Junit的TestSuite就可以了,注意這里是用的addTestSuite方法,一開始使用addTest方法就是不能成功。

Java代碼

  1.    
  2. public class ExampleSuite extends TestSuite {    
  3.         
  4.     public ExampleSuite() {    
  5.         addTestSuite(TestMath.class);    
  6.     }    
  7.     
  8. }    

第三步:新建一個Activity,用來啟動單元測試,并顯示測試結果。系統的AndroidTestRunner竟然什么連個UI界面也沒有實現,這里只是最簡單的實現了一個

Java代碼

  1. public class TestActivity extends Activity {    
  2.         
  3.     private TextView resultView;    
  4.         
  5.     private TextView barView;    
  6.         
  7.     private TextView messageView;    
  8.         
  9.     private Thread testRunnerThread;    
  10.         
  11.     private static final int SHOW_RESULT = 0;    
  12.         
  13.     private static final int ERROR_FIND = 1;    
  14.     
  15.     @Override    
  16.     protected void onCreate(Bundle savedInstanceState) {    
  17.         super.onCreate(savedInstanceState);    
  18.         setContentView(R.layout.main);    
  19.         resultView = (TextView)findViewById(R.id.ResultView);    
  20.         barView = (TextView)findViewById(R.id.BarView);    
  21.         messageView = (TextView)findViewById(R.id.MessageView);    
  22.         Button lunch = (Button)findViewById(R.id.LunchButton);    
  23.         lunch.setOnClickListener(new View.OnClickListener() {    
  24.             @Override    
  25.             public void onClick(View v) {    
  26.                 startTest();    
  27.             }    
  28.         });    
  29.     }    
  30.         
  31.     private void showMessage(String message) {    
  32.         hander.sendMessage(hander.obtainMessage(ERROR_FIND, message));    
  33.     }    
  34.         
  35.     private void showResult(String text) {    
  36.         hander.sendMessage(hander.obtainMessage(SHOW_RESULT, text));    
  37.     }    
  38.         
  39.     private synchronized void startTest() {    
  40.         if (testRunnerThread != null    
  41.                 && testRunnerThread.isAlive()) {    
  42.             testRunnerThread = null;    
  43.         }    
  44.         if (testRunnerThread == null) {    
  45.             testRunnerThread = new Thread(new TestRunner(this));    
  46.             testRunnerThread.start();    
  47.         } else {    
  48.             Toast.makeText(this,     
  49.                     "Test is still running",     
  50.                     Toast.LENGTH_SHORT).show();    
  51.         }    
  52.     }    
  53.         
  54.     public Handler hander = new Handler() {    
  55.         public void handleMessage(Message msg) {    
  56.             switch (msg.what) {    
  57.                 case SHOW_RESULT:    
  58.                     resultView.setText(msg.obj.toString());    
  59.                     break;    
  60.                 case ERROR_FIND:    
  61.                     messageView.append(msg.obj.toString());    
  62.                     barView.setBackgroundColor(Color.RED);    
  63.                     break;    
  64.                 default:    
  65.                     break;    
  66.             }    
  67.         }    
  68.     };    
  69.         
  70.     class TestRunner implements Runnable, TestListener {    
  71.         
  72.         private Activity parentActivity;    
  73.             
  74.         private int testCount;    
  75.             
  76.         private int errorCount;    
  77.             
  78.         private int failureCount;    
  79.             
  80.         public TestRunner(Activity parentActivity) {    
  81.             this.parentActivity = parentActivity;    
  82.         }    
  83.     
  84.         @Override    
  85.         public void run() {    
  86.             testCount = 0;    
  87.             errorCount = 0;    
  88.             failureCount = 0;    
  89.                 
  90.             ExampleSuite suite = new ExampleSuite();    
  91.             AndroidTestRunner testRunner = new AndroidTestRunner();    
  92.             testRunner.setTest(suite);    
  93.             testRunner.addTestListener(this);    
  94.             testRunner.setContext(parentActivity);    
  95.             testRunner.runTest();    
  96.         }    
  97.     
  98.         @Override    
  99.         public void addError(Test test, Throwable t) {    
  100.             errorCount++;    
  101.             showMessage(t.getMessage() + "\n");    
  102.         }    
  103.     
  104.         @Override    
  105.         public void addFailure(Test test, AssertionFailedError t) {    
  106.             failureCount++;    
  107.             showMessage(t.getMessage() + "\n");    
  108.         }    
  109.     
  110.         @Override    
  111.         public void endTest(Test test) {    
  112.             showResult(getResult());    
  113.         }    
  114.     
  115.         @Override    
  116.         public void startTest(Test test) {    
  117.             testCount++;    
  118.         }    
  119.             
  120.         private String getResult() {    
  121.             int successCount = testCount - failureCount - errorCount;    
  122.             return "Test:" + testCount + " Success:" + successCount + " Failed:" + failureCount + " Error:" + errorCount;    
  123.         }    
  124.             
  125.     }    
  126.     
  127. }    

第四步:修改AndroidManifest.xml,加入,不然會提示找不到AndroidTestRunner,這里需要注意是這句話是放在applications下面的,我一開始也不知道,放錯了地方,浪費了不少時間

Xml代碼

  1. xml version="1.0" encoding="utf-8"?>      
  2. <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"      
  3.       package="com.test.sample"      
  4.       Android:versionCode="1"      
  5.       Android:versionName="1.0">      
  6.     <application Android:icon="@drawable/icon" Android:label="@string/app_name" Android:debuggable="true">      
  7.         <activity Android:name=".TestActivity"      
  8.                   Android:label="@string/app_name">      
  9.             <intent-filter>      
  10.                 <action Android:name="Android.intent.action.MAIN" />      
  11.                 <category Android:name="Android.intent.category.LAUNCHER" />      
  12.             intent-filter>      
  13.         activity>      
  14.     <uses-library Android:name="Android.test.runner" />      
  15.     application>      
  16.     <uses-sdk Android:minSdkVersion="4" />      
  17. manifest>      

【編輯推薦】

  1. 全面剖析Java ME單元測試理念
  2. Java ME Unit單元測試技術簡介
  3. Android數據庫事務淺析
  4. 深度剖析Android單元測試問題
  5. Android單元測試源碼解讀
責任編輯:佚名 來源: JavaEye
相關推薦

2010-10-15 10:43:28

私有云服務器虛擬化

2012-08-30 14:08:47

IBMdW

2011-06-27 09:05:58

云計算私有云CIO

2017-03-29 13:51:06

戴爾混合云四部曲

2012-05-30 10:24:23

服務器選購中小企業

2011-06-10 20:48:47

惠普

2009-03-11 14:13:00

跳槽職場贏家

2017-02-06 10:56:37

大數據現場設備數治

2011-07-05 09:17:41

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2011-11-18 15:18:41

Junit單元測試Java

2011-08-11 13:02:43

Struts2Junit

2009-06-08 19:57:29

EclipseJUnit4單元測試

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 20:04:06

EclipseJUnit4單元測試

2017-03-23 16:02:10

Mock技術單元測試

2017-01-14 23:42:49

單元測試框架軟件測試

2012-02-07 09:08:50

Feed4JUnitJava

2021-01-07 14:06:30

Spring BootJUnit5Java
點贊
收藏

51CTO技術棧公眾號

亚洲精品菠萝久久久久久久| 麻豆精品国产传媒mv男同| 欧美videos中文字幕| 三上悠亚久久精品| 北岛玲一区二区三区| 国产综合久久久久久久久久久久| 欧美日产国产成人免费图片| 亚洲少妇18p| 欧亚一区二区| 一区二区三区四区不卡在线 | 久久精品欧美一区二区| 日韩欧美四区| 欧美日韩dvd在线观看| 人妻互换免费中文字幕| 久草在现在线| 国产精品亚洲视频| 国产精品h片在线播放| 18岁成人毛片| 国产精品欧美三级在线观看| 日韩欧美色综合| 成人在线观看黄| 日韩特级毛片| 亚洲国产精品高清| 国产自产精品| 国产又粗又猛又爽又黄91| 亚洲欧美日韩专区| 欧美多人爱爱视频网站| 日本成人午夜影院| 久久a爱视频| 91精品福利在线一区二区三区| 欧美亚洲一二三区| 天堂av在线电影| 国产精品无人区| 久久av一区二区三区漫画| 99久久精品日本一区二区免费 | 亚洲黄色小说网站| 五月天国产一区| 青青草手机在线| 丁香啪啪综合成人亚洲小说 | 国产精品白浆| 日韩一区二区视频在线观看| 亚洲精品午夜在线观看| 户外露出一区二区三区| 欧美日韩午夜视频在线观看| 日韩激情视频一区二区| 在线三级中文| 亚洲人成小说网站色在线| 日韩高清av| 日本福利片在线| 99久精品国产| 国产精品9999久久久久仙踪林| 国产喷水吹潮视频www| 精品亚洲成av人在线观看| 国产精品久久久久久亚洲调教| 麻豆成人免费视频| 亚洲女同在线| 日本精品一区二区三区在线| 成人毛片18女人毛片| 精品动漫一区| 久久免费观看视频| 日韩特黄一级片| 亚洲综合好骚| 日韩美女在线看| 伦av综合一区| 免费在线观看视频一区| 国产精品男人的天堂| 在线观看国产黄| 久久99久久精品| 亚洲一区美女视频在线观看免费| 国产日韩在线观看一区| 国产成人精品网址| 成人欧美一区二区三区在线观看 | 久久国内精品自在自线400部| 国产欧美久久一区二区| 97在线播放免费观看| 国产伦理精品不卡| 国产v亚洲v天堂无码| 天堂网av2014| 国产日产欧美精品一区二区三区| 亚洲一区尤物| 国产视频中文字幕在线观看| 一区二区三区中文字幕电影| 久激情内射婷内射蜜桃| 中文字幕乱码在线播放| 欧美亚洲高清一区| 精品人妻一区二区三| 黑色丝袜福利片av久久| 国产亚洲美女久久| 国产一二三区精品| 最新亚洲一区| 日本午夜在线亚洲.国产| 亚洲午夜无码久久久久| 国产在线精品不卡| 精品久久久久久一区| 国产精品99999| 亚洲欧美色图小说| 日韩精品视频久久| 久久久久久一区二区三区四区别墅| 欧美另类一区二区三区| 中文字幕乱视频| 日韩三级在线| 午夜精品在线视频| 又色又爽又黄无遮挡的免费视频| 国产成人精品免费看| 日韩成人av电影在线| 91精品久久久| 欧美性猛交xxxxx免费看| 一区二区在线免费看| 国产精品主播在线观看| 色偷偷综合社区| 九九热在线视频播放| 美女网站色91| 久久国产一区二区| 动漫一区在线| 色综合久久88色综合天天免费| jizzzz日本| 天堂日韩电影| 欧美成人中文字幕| 无码人妻黑人中文字幕| 国产成人亚洲综合a∨婷婷| 日韩精品一区二区三区四区五区| 丰满的护士2在线观看高清| 在线视频观看一区| 尤物网站在线观看| 91精品综合| 国产精品电影久久久久电影网| 亚洲国产一二三区| 亚洲视频香蕉人妖| 午夜dv内射一区二区| 国产在线播放精品| 九九精品视频在线观看| 91久久精品国产91性色69 | 国产一区免费在线| 在线观看三级视频| 宅男在线国产精品| www.涩涩爱| 天堂影院一区二区| 噜噜噜噜噜久久久久久91| 麻豆av在线播放| 日韩欧美一区二区视频| 日韩福利小视频| 蜜桃在线一区二区三区| 日韩国产高清一区| 美女100%一区| 亚洲男人的天堂在线| 国产午夜性春猛交ⅹxxx| 成人国产视频在线观看| av片在线免费| 亚洲视频一起| 久久久久久久久久久久av| 精品国产av一区二区三区| 综合在线观看色| 手机免费看av网站| 亚洲国产精品91| 91视频免费网站| 成人av黄色| 91精品久久久久久久99蜜桃| 丁香花五月激情| 国产精品 日产精品 欧美精品| 亚洲黄色网址在线观看| 久久视频社区| 欧美极品欧美精品欧美视频 | 影音先锋亚洲天堂| 26uuu国产一区二区三区 | 免费视频最近日韩| 一区二区三区四区不卡| 成人短视频软件网站大全app| 久久久国产精品免费| www.97av| 亚洲h在线观看| 亚洲第一成人网站| 日韩av电影一区| 久久av秘一区二区三区| 91精品国产自产在线丝袜啪| 久久免费国产精品1| 青青草观看免费视频在线 | 久久久久久欧美| 日韩精品系列| 欧美日韩一本到| 婷婷在线精品视频| av男人天堂一区| av无码精品一区二区三区| 久久一本综合| 成人免费视频视频在| 网友自拍亚洲| 久久伊人免费视频| 午夜视频在线播放| 欧美日韩国产一级二级| 精品亚洲永久免费| 国产亚洲精品久| 午夜诱惑痒痒网| 国产精品美女| 在线观看一区二区三区三州 | 日韩欧美一区二区视频| 1级黄色大片儿| 国产精品久线在线观看| 日韩成人av影院| 日本欧美久久久久免费播放网| 无码人妻精品一区二区蜜桃百度| 天天久久夜夜| 成人一区二区电影| 亚洲精品一区| 欧美另类交人妖| 成人在线视频成人| 精品91自产拍在线观看一区| 国产精品51麻豆cm传媒| 亚洲电影在线播放| 久久嫩草捆绑紧缚| 久久蜜桃av一区精品变态类天堂 | 久久嫩草精品久久久久| 四虎成人在线播放| 久久午夜精品一区二区| 妞干网视频在线观看| 精品一区电影| 精品乱码一区| 亚洲精品福利| 国产综合色香蕉精品| 国产精品粉嫩| 欧美精品第一页在线播放| 一级毛片视频在线| 亚洲免费电影一区| 日韩中文字幕免费观看| 欧美一区二区在线观看| 日韩一级片中文字幕| 午夜精品影院在线观看| 国产av 一区二区三区| 国产精品久久久久一区二区三区| 97超碰在线免费观看| 成人sese在线| 97免费公开视频| 精品午夜久久福利影院| 国产97色在线 | 日韩| 国产精品亚洲综合色区韩国| 人人妻人人澡人人爽欧美一区双| 五月天久久网站| 五月天综合网| 精品黄色一级片| 欧美日韩高清在线一区| 欧美在线关看| 精品国产乱码久久久久软件| 哺乳一区二区三区中文视频| 97操在线视频| 久久三级中文| 成人女人免费毛片| av自拍一区| 国产激情一区二区三区在线观看| 中文一区二区三区四区| 成人av免费看| 香港久久久电影| 999国内精品视频在线| 日本伊人久久| 99九九视频| 国产ts一区| 国产女人水真多18毛片18精品| 国产精品中文字幕制服诱惑| 久久久久欧美| 要久久爱电视剧全集完整观看| 欧美国产综合视频| 欧美日韩有码| 一区二区三区我不卡| 亚洲精品国产首次亮相| 乱熟女高潮一区二区在线| 一区免费视频| 日本www在线播放| 久久国产福利| 一路向西2在线观看| 激情五月婷婷综合| 性生交大片免费看l| www.欧美色图| 无码一区二区三区在线| 国产精品美女久久久久av爽李琼| 久久免费看少妇高潮v片特黄 | 成人午夜av在线| 亚洲精品在线视频免费观看| 午夜精品一区二区在线观看的| 超碰资源在线| 一二区成人影院电影网| 久久手机免费视频| 深夜国产在线播放| 性欧美视频videos6一9| 亚洲一区站长工具| 国产欧美精品日韩精品| 天堂av中文字幕| 精品1区2区在线观看| 天堂网www中文在线| 亚洲午夜国产成人av电影男同| 日本高清视频在线观看| 欧美成人精品激情在线观看| 国产污视频在线播放| 国产精品久久久久久久午夜| 日本高清精品| 青青草原成人| 欧美国产另类| 99999精品视频| 国产在线一区观看| 国产伦精品一区二区三区妓女| 国产精品亲子伦对白| 久久亚洲AV无码| 欧美在线三级电影| 亚洲老妇色熟女老太| 国产小视频91| 欧美精品videosex| 国产精品网红直播| 成人性生交大片免费看96| 亚洲五月六月| 国产精品乱看| 中国特级黄色片| 日本一区二区视频在线观看| 中文字幕第28页| 欧美日韩国产高清一区二区| 天天干天天插天天操| 久久精品国产亚洲一区二区| 不卡一二三区| 国产精品播放| 亚洲国产精品91| 国产理论在线播放| 91小视频在线免费看| 国产女片a归国片aa| 欧美亚洲精品一区| 污视频网站免费观看| 久99九色视频在线观看| 精品自拍视频| 日本一区二区三区在线视频| 亚洲精品极品| 91精产国品一二三| 最新中文字幕一区二区三区| 久久久久久亚洲av无码专区| 亚洲国产日韩精品在线| 免费影视亚洲| 91视频免费进入| 婷婷精品进入| 亚洲欧美自偷自拍另类| 久久精品视频免费观看| www.国产高清| 亚洲第一色中文字幕| 日本性爱视频在线观看| 亚洲一区二区三区乱码aⅴ| 93在线视频精品免费观看| 男女无套免费视频网站动漫| 91蜜桃网址入口| 91久久国产视频| 亚洲第一区在线| 男女在线视频| 成人情视频高清免费观看电影| 一区二区日韩欧美| 日韩在线一区视频| 激情av一区| 在线播放黄色av| 亚洲三级免费观看| 国产毛片在线视频| 久久综合电影一区| 国产免费av国片精品草莓男男| 久久av秘一区二区三区| 国内精品国产三级国产a久久 | 999久久久久久久久6666| 香蕉视频在线网址| 国产麻豆视频精品| 国产精品久久久精品四季影院| 欧美一区二区三区播放老司机| caopon在线免费视频| 99久久综合狠狠综合久久止| 欧美精品一区二区三区久久久竹菊| 波多野结衣中文字幕在线播放| 亚洲激情一二三区| 黄色成人一级片| 奇米影视亚洲狠狠色| 成人激情视频| 成人日韩在线视频| 亚洲精品国产第一综合99久久| 风流少妇一区二区三区91| 97碰碰碰免费色视频| 精品久久影院| 不卡中文字幕在线观看| 一区二区三区四区视频精品免费| 日本波多野结衣在线| 琪琪第一精品导航| 99久久精品费精品国产| 乳色吐息在线观看| 精品国产精品自拍| youjizz在线播放| 亚洲综合成人婷婷小说| 伊人精品在线| 中文字幕人妻一区二区三区在线视频| 欧美日韩一区二区三区四区五区 | 亚洲欧美激情插 | 黄黄视频在线观看| av毛片久久久久**hd| 国产日韩久久久| 色在人av网站天堂精品| 香蕉久久99| www.成人黄色| 激情成人中文字幕| 日韩精品黄色| 国产欧美日韩伦理| 麻豆精品在线观看| 日本va欧美va国产激情| 中文字幕日韩av综合精品| 99精品国产一区二区三区2021| 欧美激情精品久久久久久小说| 亚洲精品视频一区二区|