国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在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

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 19:57:29

EclipseJUnit4單元測試

2011-08-11 13:02:43

Struts2Junit

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技術棧公眾號

欧美在线观看成人| 国产免费专区| 精品国产亚洲一区二区在线观看| 亚洲国产欧美在线| 精品日产一区2区三区黄免费| 欧洲亚洲精品久久久久| 欧美在线观看一二区| 99视频在线免费| 三级精品在线观看| 国产精品视频专区| 国产精品久久久久久久久免费高清 | 一区二区三区在线看| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 蜜桃精品噜噜噜成人av| 国产视频一区在线| 日本精品在线| 欧美日韩色婷婷| 国产高清视频网站| 成人美女在线观看| 日韩影视精品| 国产一区清纯| 91精品视频在线看| 丝袜连裤袜欧美激情日韩| 亚洲免费av电影| 操你啦在线视频| 色综合欧美在线视频区| 九色中文视频| 日韩码欧中文字| 久久久久久香蕉| 丰满岳乱妇一区二区三区| 一本一道久久a久久精品综合| 国产一级一区二区| 国产一区二区久久久| 欧美日本亚洲韩国国产| 成人亚洲欧美一区二区三区| 亚洲大片精品免费| 91精品国产91久久久久久久久| 日韩成人在线看| 欧美黑人国产人伦爽爽爽| 日本少妇精品亚洲第一区| 久久精品视频在线| 四虎精品永久免费| 欧美成人精品一区| 久久视频免费| 欧美在线免费看| 久久神马影院| 国产日韩欧美亚洲一区| 亚洲青色在线| 中文字幕一区二区三区最新| 国产东北露脸精品视频| 国产精品免费入口| 国产精品免费视频网站| 国产igao激情在线入口| 亚洲不卡av一区二区三区| 天天夜夜亚洲| 欧美剧情电影在线观看完整版免费励志电影| 中文字幕在线视频区| 精品少妇一区二区三区在线播放| 91www在线| 久久影院模特热| 自拍偷拍一区| 国产69精品久久久久9999apgf| 国产偷自视频区视频一区二区| 在线观看欧美一区| 国产丝袜美腿一区二区三区| а√最新版在线天堂| 欧美日韩一区免费| 久操av在线| 欧美国产精品人人做人人爱| 日韩av自拍| 欧美午夜免费| 久久久五月婷婷| 你懂的免费在线观看视频网站| 91精品午夜视频| 欧美videos粗暴| 国产精品日韩av| 日本大胆欧美人术艺术动态| 欧美 日韩 国产 高清| 樱花影视一区二区| 成人日日夜夜| 欧美华人在线视频| 一区在线播放| 欧美少妇性生活视频| 色综合久久中文字幕| 日韩av中字| 国产精品毛片a∨一区二区三区|国 | 伊人久久大香线蕉综合影院首页| 2023亚洲男人天堂| 视频一区免费在线观看| 男人搞女人网站| 欧美日韩一区三区四区| 精品裸体bbb| 91色视频在线观看| caoporen国产精品视频| 先锋影音欧美性受| 亚洲一级黄色av| 亚洲电影在线一区二区三区| 裸体裸乳免费看| 亚洲精品成人悠悠色影视| 国产蜜臀av在线播放| 欧美性受黑人性爽| 热99这里只有精品| 玉米视频成人免费看| 天海翼一区二区三区四区在线观看| 一本色道亚洲精品aⅴ| 精品三级久久| 国产成人精品免费久久久久| 久久午夜精品一区二区| 鲁一鲁一鲁一鲁一av| 欧美精品久久99久久在免费线| 久久的色偷偷| 日韩成人av网站| 亚洲一区二区三区四区五区黄| 川上优av中文字幕一区二区| 91av国产在线| 久久99精品久久只有精品| 国产天堂在线观看| 日韩久久精品成人| 亚洲午夜精品一区二区国产| 91丨porny丨探花| 欧美丰满美乳xxx高潮www| 香蕉久久精品| 91视频 -- 69xx| 91精品国产91久久久久久一区二区 | 日本高清视频一区| 国产成人精品免费一区二区| 久久免费看视频| 97国产真实伦对白精彩视频8| 麻豆精品久久久| 黄色小视频在线免费观看| 992tv在线成人免费观看| 国产精品一区免费视频| 香蕉视频在线播放| 91精品久久久久久久| 国产亚洲成年网址在线观看| 欧美人体一区二区三区| 欧洲精品码一区二区三区免费看| 精品日本美女福利在线观看| 久久a爱视频| 免费在线观看日韩视频| 一本色道久久88综合亚洲精品ⅰ| 久久一日本道色综合久久| 在线观看视频污| 国产精品久久久久免费a∨大胸 | 免费在线观看日韩欧美| 青青免费在线视频| 国产成人涩涩涩视频在线观看| 国产欧美一区视频| 97色婷婷成人综合在线观看| 久久亚洲a v| 国产一区二区av| 国产超碰在线一区| julia一区二区三区中文字幕| 亚洲一区三区视频在线观看| 日韩一区二区在线观看视频 | 永久免费的av网站| 久久精品国产视频| 91丝袜国产在线播放| 美女100%一区| 精品视频在线观看一区二区| 亚洲精品ady| 国产一区二区不卡在线 | 亚洲午夜激情av| 一级毛片精品毛片| 99精品视频播放| 九九视频直播综合网| 欧美国产日韩精品免费观看| av毛片精品| 久草.com| 99九九视频| 欧美一区二区三区四区久久| 久久综合五月| gogo亚洲高清大胆美女人体| 欧洲精品一区二区三区久久| 久久综合五月天| 亚洲黄色在线视频| 亚洲天堂偷拍| 忘忧草在线日韩www影院| 国产精品videossex国产高清| 中文字幕精品在线| 中文字幕av免费专区久久| 亚洲三级网址| av国产在线观看| 一区精品视频| xvideos成人免费中文版| 中文文精品字幕一区二区| 精品美女在线视频| 日本中文字幕在线观看| 咪咪色在线视频| 久久久久免费精品国产| 亚洲一区二区3| 国产欧美一区二区三区国产幕精品| 日韩av官网| 成人久久久久久久久| 国产国产精品人在线视| 欧美日韩综合视频| 久久精品人人做人人爽电影蜜月| 亚洲承认视频| 日韩男人天堂| 色姑娘综合网|