自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在Android上實(shí)現(xiàn)Junit單元測(cè)試的四部曲

移動(dòng)開發(fā) Android
本文講述在Android上實(shí)現(xiàn)Junit單元測(cè)試,利用JUnit等單元測(cè)試框架進(jìn)行單元測(cè)試對(duì)于Java程序員并不陌生,利用這些非常有效的工具,使得代碼的質(zhì)量得到有效的監(jiān)控和維護(hù)。

我們?cè)?jīng)和大家探討過全面剖析Java ME單元測(cè)試?yán)砟?/a>,其實(shí)在Android上實(shí)現(xiàn)JUnit單元測(cè)試也不是很困難,主要是在配置文件和測(cè)試環(huán)境上將花費(fèi)很長時(shí)間,下面從四步簡單講一下在Android上實(shí)現(xiàn)Junit單元測(cè)試。

第一步:新建一個(gè)TestCase,記得要繼承androidTestCase,才能有g(shù)etContext()來獲取當(dāng)前的上下文變量,這在Android測(cè)試中很重要的,因?yàn)楹芏嗟腁ndroid 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. }    

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

Java代碼

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

第三步:新建一個(gè)Activity,用來啟動(dòng)單元測(cè)試,并顯示測(cè)試結(jié)果。系統(tǒng)的AndroidTestRunner竟然什么連個(gè)UI界面也沒有實(shí)現(xiàn),這里只是最簡單的實(shí)現(xiàn)了一個(gè)

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,加入,不然會(huì)提示找不到AndroidTestRunner,這里需要注意是這句話是放在applications下面的,我一開始也不知道,放錯(cuò)了地方,浪費(fèi)了不少時(shí)間

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單元測(cè)試?yán)砟?/a>
  2. Java ME Unit單元測(cè)試技術(shù)簡介
  3. Android數(shù)據(jù)庫事務(wù)淺析
  4. 深度剖析Android單元測(cè)試問題
  5. Android單元測(cè)試源碼解讀
責(zé)任編輯:佚名 來源: JavaEye
相關(guān)推薦

2010-10-15 10:43:28

私有云服務(wù)器虛擬化

2012-08-30 14:08:47

IBMdW

2011-06-27 09:05:58

云計(jì)算私有云CIO

2017-03-29 13:51:06

戴爾混合云四部曲

2012-05-30 10:24:23

服務(wù)器選購中小企業(yè)

2011-06-10 20:48:47

惠普

2009-03-11 14:13:00

跳槽職場(chǎng)贏家

2017-02-06 10:56:37

大數(shù)據(jù)現(xiàn)場(chǎng)設(shè)備數(shù)治

2011-07-05 09:17:41

2017-01-16 12:12:29

單元測(cè)試JUnit

2017-01-14 23:26:17

單元測(cè)試JUnit測(cè)試

2011-11-18 15:18:41

Junit單元測(cè)試Java

2011-08-11 13:02:43

Struts2Junit

2009-06-08 19:59:09

EclipseJUnit單元測(cè)試

2009-06-08 19:57:29

EclipseJUnit4單元測(cè)試

2009-06-08 20:04:06

EclipseJUnit4單元測(cè)試

2017-03-23 16:02:10

Mock技術(shù)單元測(cè)試

2017-01-14 23:42:49

單元測(cè)試框架軟件測(cè)試

2012-02-07 09:08:50

Feed4JUnitJava

2021-01-07 14:06:30

Spring BootJUnit5Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)