Android測試&權限機制&數據存儲

 

測試

  • 黑盒測試 -測試人員不知道源代碼
  • 白盒測試 -測試人員知道源代碼,能寫一些測試用例

根據測試的粒度

  • 方法測試 function testandroid

  • 單元測試 unit test junit測試框架緩存

  • 集成測試 integration test安全

  • 系統測試 system testapp

根據測試的暴力程度

  • 冒煙測試 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

LogCat

LogCat面板

  • Filter過濾器

日誌等級

  • 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();

保存數據到內部存儲設備(應用私有文件夾,不須要寫入權限)(安全)

每個安裝的應用程序 默認狀況下操做系統都會給這個應用程序分配一個單獨的用戶私有的文件,別的應用程序是不能夠讀取/修改的。this

  • 應用私有文件夾默認狀況下,其餘應用沒法訪問,保證其數據安全
  • 應用私有文件路徑:/data/data/包名/
  • 獲取路徑方法:

    File path = 當前類名.this.getFilesDir();//獲取目錄是會自動建立files文件夾
                     Context.getFilesDir();
    
    返回:/data/data/包名/files
  • 獲取臨時緩存目錄cache:

    File path = 當前類名.this.getCacheDir();
                     Context.getCacheDir();
    
    返回:/data/data/包名/cache

(文件&文件夾)權限機制

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);
相關文章
相關標籤/搜索