亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
96sao精品视频在线观看| 九九九久久国产免费| 国产91露脸中文字幕在线| 日韩中文字幕在线看| 综合av色偷偷网| 亚洲国产另类久久精品| 亚洲国产精品中文| 亚洲欧美综合另类中字| 欧美国产日韩一区二区在线观看| 国产精品伦子伦免费视频| 久久久亚洲福利精品午夜| 久久久久久久国产精品| 91伊人影院在线播放| 欧美在线观看网址综合| 国产欧美日韩丝袜精品一区| 日韩电影中文字幕| 国产精品自拍网| 亚洲女人天堂色在线7777| 中文字幕在线亚洲| 国产成人综合亚洲| 日韩精品免费在线视频| 2020国产精品视频| 欧美精品生活片| 欧美电影在线观看高清| 欧美亚洲一区在线| 一区二区欧美日韩视频| 亚洲一区精品电影| 国产日韩换脸av一区在线观看| 亚洲成人aaa| 日韩大片在线观看视频| 精品成人乱色一区二区| 97国产精品免费视频| 亚洲色图25p| 国产精品极品在线| 91精品国产高清久久久久久| 国产成人精品国内自产拍免费看| 91久久精品久久国产性色也91| 亚洲美女精品成人在线视频| 欧美有码在线观看视频| 久久精品视频亚洲| 亚洲欧洲激情在线| 久久久久久午夜| 亚洲精品成人久久电影| 欧美激情伊人电影| 91天堂在线观看| 在线精品视频视频中文字幕| 精品国产福利在线| 欧美黄色片免费观看| 亚洲aa在线观看| 夜色77av精品影院| 国产精品va在线播放我和闺蜜| 欧美中文字幕视频在线观看| 日本免费一区二区三区视频观看| 欧美日韩视频在线| 欧美亚洲视频在线看网址| 亚洲第一区中文字幕| 成人亚洲综合色就1024| 亚洲精品自拍视频| 亚洲免费影视第一页| 亚洲精品一区二区三区婷婷月| 岛国av一区二区在线在线观看| 成人精品aaaa网站| 久久精品电影网站| 一本色道久久88亚洲综合88| 亚洲国产精品va在线观看黑人| 欧美亚洲成人免费| 色老头一区二区三区在线观看| 国产欧美一区二区三区视频| 91精品91久久久久久| 日韩一区二区久久久| 日韩av电影在线免费播放| 亚洲一区二区三区在线视频| 一级做a爰片久久毛片美女图片| 久久久久久久久网站| 日韩成人在线视频观看| 亚洲欧美日本伦理| 91美女片黄在线观看游戏| 性欧美亚洲xxxx乳在线观看| 国产精品久久久久国产a级| 91国产一区在线| 国产美女久久精品香蕉69| 久久不射热爱视频精品| 91在线直播亚洲| 日韩中文字幕在线视频播放| 国产成人亚洲综合91| 国产成人97精品免费看片| 久久伊人精品天天| 欧美激情一区二区久久久| 国产成人鲁鲁免费视频a| 日韩精品在线观看视频| 成人免费网站在线看| 国产69精品99久久久久久宅男| 亚洲女人被黑人巨大进入| 在线视频欧美性高潮| 日韩欧美中文字幕在线播放| 欧美国产精品va在线观看| 91免费视频国产| 国产亚洲精品综合一区91| 国产精品精品视频一区二区三区| 久久免费精品视频| 欧美高清在线播放| 日韩av综合中文字幕| 77777亚洲午夜久久多人| 伦伦影院午夜日韩欧美限制| 欧美激情视频在线| 综合激情国产一区| 亚洲第一二三四五区| 日韩免费av在线| 亚洲欧美日韩国产中文| 91精品国产高清久久久久久久久| 久久久精品国产亚洲| 欧美国产高跟鞋裸体秀xxxhd| 欧美日韩在线影院| 亚洲乱亚洲乱妇无码| 中文字幕日韩在线视频| 久久久极品av| 国产在线观看91精品一区| 欧美日韩国产影院| 久久精品小视频| 日本在线观看天堂男亚洲| 欧美成年人视频网站| 亚洲第一福利视频| 国产精品久久久久久久久借妻| 久久av在线看| 九色成人免费视频| 精品中文字幕在线观看| 91精品中国老女人| 97国产精品视频人人做人人爱| 日产精品久久久一区二区福利| 自拍偷拍亚洲欧美| 久久久亚洲欧洲日产国码aⅴ| 欧美专区在线观看| 日韩视频免费中文字幕| 黑人巨大精品欧美一区二区| 91网站免费看| 日本中文字幕不卡免费| 欧美肥臀大乳一区二区免费视频| 亚洲欧美精品中文字幕在线| 国产精品综合久久久| 国产精品爽黄69| 国产精品国产福利国产秒拍| 亚洲网站在线看| 国产精品高潮呻吟视频| 日韩av色综合| 91免费高清视频| x99av成人免费| 欧美黑人又粗大| 91久久精品国产91性色| 亚洲天天在线日亚洲洲精| 26uuu日韩精品一区二区| 疯狂蹂躏欧美一区二区精品| 操91在线视频| 中文字幕日韩在线观看| 日韩中文字幕免费看| 日韩欧美亚洲一二三区| 亚洲欧洲一区二区三区久久| 日本精品免费观看| 国产精品自产拍高潮在线观看| 日韩专区在线观看| 深夜福利亚洲导航| 国产精品久久久久久久美男| 高清欧美性猛交xxxx黑人猛交| 亚洲国产精品久久久| 欧美激情喷水视频|