Android测试&权限机制&数据存储

测试

  • 黑盒测试 -测试人员不知道源代码
  • 白盒测试 -测试人员知道源代码,能写一些测试用例

根据测试的粒度

  • 方法测试 function test
  • 单元测试 unit test junit测试框架
  • 集成测试 integration test
  • 系统测试 system 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

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

保存数据到内部存储设备(应用私有文件夹,不需要写入权限)(安全)

每一个安装的应用程序 默认情况下操作系统都会给这个应用程序分配一个单独的用户私有的文件,别的应用程序是不可以读取/修改的。

  • 应用私有文件夹默认情况下,其他应用无法访问,保证其数据安全
  • 应用私有文件路径:/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);
时间: 2024-10-15 22:15:54

Android测试&权限机制&数据存储的相关文章

Android的4中数据存储方式

Android的4中数据存储方式:1.SharedPreference2.SQLite3.ContentProvider4.File 1.SharedPreference 1)轻量级数据存储方式A 2)本质是基于XML文件存储key-value键值对数据 3)用于保存应用程序的 参数/属性的配置信息 SharedPreference对象本身只能获取数据而不支持存储和修改,修改是通过Editor来实现 实现SharedPreference存储的步骤: (1)获得SharedPreference对象

Android开发系列之数据存储(一)

  Android开发中,数据存储主要有五种:网络.数据库.SharePreferences.文件以及Content Provider.   . 数据库    Android中的数据库最常用的是Sqlite. 使用Sqlite进行数据存储,可分为以下几步:    . 继承SqliteOpenHelper    . 整理4个构造方法    . 重写onCreate与onUpgrade      public class DownDBHelper extends SQLiteOpenHelper {

Android开发手记(20) 数据存储五 网络存储

Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 安卓的网络存储比较简单,因为Android提供的 Uri 和 Intent 可以帮助我们完成大多数任务. 一.发送邮件 首先,我们来看一下如何写一个发邮件的程序.前提是需要在系统邮件程序中配置好邮件发送的账户.由于发送邮件需要访问网络,所以我们需要添加如下权限: <uses-permission android:name="

Android 学习笔记之数据存储SharePreferenced+File

学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用户之间形成交互...需要保存用户的设置和用户的数据信息...这些都离不开数据的存储...Android的数据采用五种方式来进行存储...在这里就先介绍两种存储方式... 1.使用SharedPreferences存储数据...   对于软件配置参数的保存,Windows系统采用ini文件来进行保存,

Android开发笔记之: 数据存储方式详解

无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

android开发系列之数据存储

在我们的android实际开发过程,必不可少的一种行为操作对象就是数据.有些数据,对于用户而言是一次性的,这就要求我们每次进到App的时候,都需要去刷新数据.有些数据,对于用户而言又是具有一定时效性的,比如用户账号数据.这种情况下,就要求我们采用一定的数据保存措施,在这篇博客里面,我将为大家分享一些android里面常用的数据保存方法. 首先在android里面我们用的比较多的小数量存储方式可能就是SharedPreferences,那么什么是SharedPreferences呢?为了保存软件的

Android开发-API指南-数据存储

Storage Options 英文原文:http://developer.android.com/guide/topics/data/data-storage.html 采集日期:2015-02-06 存储方式概述 用于简单数据的 Shared Preference 用于私有数据的内部存储 用于大型公开数据的外部存储 用于结构化数据的 SQLite 数据库 在本文中 使用 Shared Preference 使用内部存储 使用外部存储 使用数据库 使用网络连接 参阅 Content Provi

Android开发手记(16) 数据存储一 SharedPreferences

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据.这类似于C++中Map的数据存储方式(实际上在最后生成的.xml文件内,就是以Map格式存储的). 获取SharedPreferences的两种方式: 1.调用Context对象的getSharedPreferences()方法 2.调用Activity对象的getPrefer

android SharedPreferences 简单的数据存储

SharedPreferences 简单数据存储,我的理解是类似于windows的ini文件 可以存储很多种类型,写了个小例子 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLa