標籤:
測試
- 黑箱測試 -測試人員不知道原始碼
- 白盒測試 -測試人員知道原始碼,能寫一些測試案例
根據測試的粒度
方法測試 function test
單元測試 unit test junit測試架構
整合測試 integration test
系統測試 system test
根據測試的暴力程度
- 煙霧測試 (Smoke Test) smoke test
- 壓力測試 pressure test
單元測試架構(JUnit)
Android代碼只能運行在手機中的Dalvik虛擬機器裡,在PC機的JVM下會報錯異常,寫測試案例,通常把上傳到Android手機或模擬器中運行。
Android下單元測試流程
1.寫商務邏輯代碼
2.寫測試案例繼承AndroidTestCase類
3.寫測試方法public void testAdd() throw Exception{}
4.配置資訊清單檔
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.itheima.junit"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /><!-- 在根節點 manifest節點下放置 指令集 instrumentation --><instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for My App" android:targetPackage="com.itheima.junit" /><application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 使用的函數庫 application節點的下面--><uses-library android:name="android.test.runner" /><activity android:name="com.itheima.junit.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
- 5.選中測試方法,右鍵Run as -->Android JUnit Test
LogCatLogCat面板
日誌等級
- verbose 提醒 黑色
- debug 調試 藍色
- info 資訊 綠色
- warn 警告 橙色
- error 錯誤 紅色
天天就愛擼代碼~~
- 注意配置合適的許可權
- 寫sd卡 必須要聲明許可權的.如: 寫檔案,刪除檔案
- 讀sd卡 預設是不需要許可權的.
- 如果使用者佈建了讀取sd卡必須使用許可權,應用程式需要加上許可權
- 基本概念: 手機內部儲存空間, 手機的一塊微硬碟,手機記憶體 ROM 斷電了, 資料還是存在的 手機記憶體: 相當於電腦上的記憶體條 RAM 斷點資料就沒了. 外部儲存空間: sd卡
儲存資料到sdcard
//擷取sdcard剩餘空間long usableSpace = Environment.getExternalStorageDirectory().getUsableSpace();// 擷取外置sdcard目錄File path = Environment.getExternalStorageDirectory();// 擷取sdcard的狀態(是否掛載)String state = Environment.getExternalStorageState();
儲存資料到內部存放裝置(應用私人檔案夾,不需要寫入許可權)(安全)
每一個安裝的應用程式 預設情況下作業系統都會給這個應用程式分配一個單獨的使用者私人的檔案,別的應用程式是不可以讀取/修改的。
(檔案&檔案夾)許可權機制
MainActivity.this.openFileOutput("private.txt", MODE_PRIVATE);
參數1:檔案
參數2:
MODE_PRIVATE 私人檔案(不可讀寫) MODE_WORLD_READABLE 唯讀檔案 MODE_WORLD_WRITEABLE 唯寫檔案 MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE 可讀寫檔案
一個應用讀取另一個應用的私人檔案夾下的檔案:
* 私人檔案:沒有許可權 * 可讀檔案:可讀 * 可寫檔案:沒有許可權 * 可讀可寫檔案:可讀
一個應用寫入另一個應用的私人檔案夾下的檔案:
* 私人檔案:沒有許可權 * 可讀檔案:沒有許可權 * 可寫檔案:可寫 * 可讀可寫檔案:可寫
許可權表示:
0 123 456 789
0 表示檔案類型:l(小寫L)軟串連,d 表示檔案夾,- 表示檔案1 4 7 表示是否可讀。r 可讀,- 不可讀2 5 8 表示是否可寫。w 可寫,- 不可寫3 6 9 表示是否可執行。x 可執行,- 不可執行(一般用於開發人員常用的二進位可執行程式)
許可權分組
123:應用許可權,使用者權限456:所在組其他使用者權限789:其他應用,其他使用者
許可權值:
r 許可權值對應 4 w 許可權值對應 2 - 許可權值對應 1
更改許可權命令樣本:
chmod 777 file.txt 變更檔許可權全域可讀可寫可執行
XML解析
解析步驟:
// 擷取資產管理器 AssetManager am = this.getAssets(); try { /***************************************/ // 1. 讀取xml資料 InputStream is = am.open("weather.xml"); /***************************************/ // 2. 解析資料(pull解析,Android下的XML解析方式) // 2.1建立XML解析器 XmlPullParser parser = Xml.newPullParser(); // 2.2初始XML化解析器,指定解析哪個流,以什麼編碼解析 parser.setInput(is, "UTF-8"); // 2.3解析XML資料 int type = parser.getEventType(); while (type == XmlPullParser.START_TAG) { String str = parser.nextText(); } } ………………………… /***************************************/ } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ /***************************************/ //關閉資料流 try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }; }
Android下XML產生(序列化)
XML儲存資料
………… // 擷取應用私人目錄臨時緩衝目錄 File path = MainActivity.this.getCacheDir(); FileOutputStream fos = new FileOutputStream(new File(path, "info.xml"));/***************************************/ // a.建立Xml序列化器 XmlSerializer serializer = Xml.newSerializer();/***************************************/ // b.初始化Xml序列化器設定輸出資料流,和編碼方式 serializer.setOutput(fos, "UTF-87");/***************************************/ // c.寫入xml資料 //文檔開頭 serializer.startDocument("UTF-8", true); serializer.startTag(null, "info"); serializer.startTag(null, "qq"); serializer.text(qq); serializer.endTag(null, "qq"); serializer.startTag(null, "pw"); serializer.text(pw); serializer.endTag(null, "pw"); serializer.endTag(null, "info"); //文檔結束 serializer.endDocument(); …………/***************************************/ //關閉流 fos.close(); …………
大招:SharedPreferences封裝/讀取XML資料
SharedPreferences儲存資料(儲存位置:/data/data/包名/shared_prefs/xxx.xml)
// 擷取應用私人目錄臨時緩衝目錄 File path = MainActivity.this.getCacheDir(); FileOutputStream fos = new FileOutputStream(new File(path, "info.xml"));/***************************************/ //初始化SharedPreferences SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE);/***************************************/ //通過SharedPreferences擷取編輯器 Editor ed =sp.edit();/***************************************/ //寫入資料 ed.putString("qq",qq); ed.putString("pw",pw);/***************************************/ //提交資料 ed.commit();/***************************************/ //關閉流 fos.close(); …………
SharedPreferences讀取XML資料
//初始化SharedPreferences SharedPreferences sp2 = this.getSharedPreferences("config", MODE_PRIVATE); //讀取資料 sp2.getString("qq", ""); …… sp2.getXXX(key, defValue);
Android測試&許可權機制&資料存放區