麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

Android 單元測試過程詳解

2024-04-29 21:01:05
字體:
來源:轉載
供稿:網友

android源代碼中每個app下中都自帶了一個test用例,下面主要介紹下camra單元測試用例 在AndroidManifest.xml中標明了測試用例instrumentation函數入口

<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2008 The Android Open Source Project     Licensed under the Apache License, Version 2.0 (the "License");     you may not use this file except in compliance with the License.     You may obtain a copy of the License at            http://www.apache.org/licenses/LICENSE-2.0       Unless required by applicable law or agreed to in writing, software     distributed under the License is distributed on an "AS IS" BASIS,     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.     See the License for the specific language governing permissions and     limitations under the License.--><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.android.camera.tests">    <application>        <uses-library android:name="android.test.runner" />    </application>    <instrumentation android:name="CameraLaunchPerformance"            android:targetPackage="com.android.camera"            android:label="Camera Launch Performance">    </instrumentation>        <instrumentation android:name="com.android.camera.CameraStressTestRunner"             android:targetPackage="com.android.camera"             android:label="Camera Stress Test InstrumentationRunner">    </instrumentation>    <instrumentation android:name="android.test.InstrumentationTestRunner"             android:targetPackage="com.android.camera"             android:label="Tests for Camera application."/></manifest> 

 

camera啟動性能測試 

package com.android.camera;import android.app.Activity;import android.os.Bundle;import android.test.LaunchPerformanceBase;/** * Instrumentation class for Camera launch performance testing. */public class CameraLaunchPerformance extends LaunchPerformanceBase {    public static final String LOG_TAG = "CameraLaunchPerformance";    public CameraLaunchPerformance() {        super();    }    @Override    public void onCreate(Bundle arguments) {        super.onCreate(arguments);        mIntent.setClassName(getTargetContext(), "com.android.camera.Camera");        start();    }    /**     * Calls LaunchApp and finish.     */    @Override    public void onStart() {        super.onStart();        LaunchApp();        finish(Activity.RESULT_OK, mResults);    }}

 

camera拍照壓力測試,參數設定為反復拍照100次 

package com.android.camera.stress;import com.android.camera.Camera;import android.app.Instrumentation;import android.test.ActivityInstrumentationTestCase2;import android.test.suitebuilder.annotation.LargeTest;import android.util.Log;import android.view.KeyEvent;/** * Junit / Instrumentation test case for camera test * * Running the test suite: * * adb shell am instrument / *    -e class com.android.camera.stress.ImageCapture / *    -w com.android.camera.tests/com.android.camera.CameraStressTestRunner * */public class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> {    private String TAG = "ImageCapture";    private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 100;    private static final int TOTAL_NUMBER_OF_VIDEOCAPTURE = 100;    private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1000;    private static final long WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN = 50000; //50seconds    private static final long WAIT_FOR_PREVIEW = 1000; //1 seconds    public ImageCapture() {        super("com.android.camera", Camera.class);    }    @Override    protected void setUp() throws Exception {        getActivity();        super.setUp();    }    @Override    protected void tearDown() throws Exception {        super.tearDown();    }    @LargeTest    public void testImageCapture() {        Instrumentation inst = getInstrumentation();        try {            for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {                Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);                Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);            }        } catch (Exception e) {            Log.v(TAG, e.toString());        }            assertTrue("testImageCapture", true);    }    @LargeTest    public void testVideoCapture() {        Instrumentation inst = getInstrumentation();        //Switch to the video mode        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);        try {            for (int i = 0; i < TOTAL_NUMBER_OF_VIDEOCAPTURE; i++) {                Thread.sleep(WAIT_FOR_PREVIEW);                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);                //record an video                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);                Thread.sleep(WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN);                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);                Thread.sleep(WAIT_FOR_PREVIEW);                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);            }        } catch (Exception e) {            Log.v(TAG, e.toString());        }            assertTrue("testVideoCapture", true);    }}

 

 

如果想在android里面做單元測試,有兩條基本的路子可行。 

第一, 就是java程序員最為熟悉和常用的JUnit, 但是由于目前android sdk (version 1.1)中只是提供了stubbed methods/classes,沒有具體的實現代碼,所以如果用JUnit的話,我們需要在運行單元測試時,一定要用JDK來運行,利用java命令來啟動JUnit的某個Runner。如果是用Eclipse的話,可以在Run Configuration里新建一個JUnit。但是一定要記得在Classpath選項卡里將Bootstrap Entries中的Android Library改成JRE,并且添加junit.jar。具體的設置可以參考:http://developer.android.com/guide /appendix/faq/troubleshooting.html#addjunit。而且,更為遺憾的是,這種方法運行的JUnit運行在JDK之上的,而不是android,所以,只能測試一些和android無關的東西,比如業務邏輯,數據封裝,數值計算等等。并不能測試android api。 

第二, 采用Instrumentation. Android單元測試的主入口是InstrumentationTestRunner。它相當于JUnit當中TestRunner的作用。你可以將 Instrumentation理解為一種沒有圖形界面的,具有啟動能力的,用于監控其他類(用Target Package聲明)的工具類。任何想成為Instrumentation的類必須繼承android.app.Instrumentation。 

下面通過一個實例來看一下如何通過Instrumentation來做單元測試。 

Step 1.首先編寫需要測試的activity: 

import android.app.Activity;import android.os.Bundle;public class AndroidUT extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }       public int add(int a, int b)    {        return a + b;    }}

 

 

Step 2. 

接下來編寫測試類,其中主要來測試add()方法。我們在當前代碼目錄下,在新建一個文件夾,命名為test,并在里面新建了包com.android.ut.test。然后往里面新增加一個class.具體如下: 

import com.android.ut.AndroidUT;import android.test.ActivityInstrumentationTestCase;public class TestApp extends ActivityInstrumentationTestCase<AndroidUT> {       public TestApp()    {        super("com.android.ut", AndroidUT.class);    }       public void testSum()    {        assertEquals(5, getActivity().add(2, 3));    }   }

 

Step 3.最后一步就是要改一下Manifest文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.android.ut"      android:versionCode="1"      android:versionName="1.0.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".AndroidUT"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    <uses-library android:name="android.test.runner" />    </application>    <instrumentation android:targetPackage="com.android.ut" android:name="android.test.InstrumentationTestRunner" android:label="Test Unit Tests"></instrumentation></manifest>

 

需要注意的是,在這里面我加上了: 

<uses-library android:name="android.test.runner" /> 

以及: 

<instrumentation android:targetPackage="com.android.ut" 		 android:name="android.test.InstrumentationTestRunner" 		 android:label="Test Unit Tests"></instrumentation>  

 

 

Step 4.運行 

首先通過模擬器運行一下AndroidUT,然后在命令行終端中運行 

adb shell am instrument -e class com.android.ut.test.TestApp -wcom.android.ut/android.test.InstrumentationTestRunner  

 

 

這樣你就可以看到測試結果了

# am instrument -e class com.cn.test.TestApp -w com.cn/android.test.InstrumentationTestRunnercom.cn.test.TestApp:..Test results for InstrumentationTestRunner=..Time: 2.866OK (2 tests)

 

后臺測試log日志信息 
D/AndroidRuntime(  941): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<D/AndroidRuntime(  941): CheckJNI is OND/AndroidRuntime(  941): --- registering native functions ---D/FileBackupHelper_native(  941): register_android_backup_FileBackupHelperD/ActivityManager(  581): Uninstalling process com.cnI/ActivityManager(  581): Start proc com.cn for added application com.cn: pid=948 uid=10013 gids={}I/TestRunner(  948): started: testSum(com.cn.test.TestApp)      //啟動add()測試方法I/ActivityManager(  581): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.cn/.AndroidUT }I/ActivityManager(  581): Displayed activity com.cn/.AndroidUT: 645 ms (total 645 ms)I/TestRunner(  948): finished: testSum(com.cn.test.TestApp)I/TestRunner(  948): passed: testSum(com.cn.test.TestApp)I/TestRunner(  948): started: testActivityTestCaseSetUpProperly(com.cn.test.TestApp)I/ActivityManager(  581): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.cn/.AndroidUT }I/ActivityManager(  581): Displayed activity com.cn/.AndroidUT: 412 ms (total 412 ms)I/TestRunner(  948): finished: testActivityTestCaseSetUpProperly(com.cn.test.TestApp)I/TestRunner(  948): passed: testActivityTestCaseSetUpProperly(com.cn.test.TestApp)D/ActivityManager(  581): Uninstalling process com.cnD/ActivityManager(  581): Force removing process ProcessRecord{43851fa0 948:com.cn/10013} (com.cn/10013)D/AndroidRuntime(  941): Shutting down VM

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 2021狠狠操| 欧产日产国产精品v | 精品一区久久久 | 国产污污视频 | 亚洲无av| 一级成人免费 | 久久精品中文字幕一区 | 免费a级网站 | 久久精品re | 玩偶姐姐 在线观看 | 国产精品免费一区二区 | 羞羞的动漫在线观看 | 摸逼逼视频 | 狼人狠狠干 | www.91成人| 久久老司机精品视频 | 久久丝袜脚交足黄网站免费 | 国产精品刺激对白麻豆99 | 精品免费久久 | 日本在线视频一区二区三区 | 久久精品久 | 国产在线一级视频 | 4p一女两男做爰在线观看 | 综合国产在线 | 亚洲福利在线视频 | 99欧美视频 | 毛片118极品美女写真 | 久久成人午夜视频 | 色污视频在线观看 | 成人免费毛片片v | 男人的天堂色偷偷 | av视在线 | 欧洲a级片 | av免费在线观 | 免费在线观看国产精品 | 亚洲精品一区二区三区在线看 | 午夜视频中文字幕 | 久久新网址 | 欧美一级免费高清 | 国产系列 视频二区 | 欧美成人性生活 |