Android基础2(包含测试、保存数据、获取目录等)

#1 测试的相关概念 (了解) * SUV 开发车载系统 ,测试有问题 ,好的软件不是开发出来的 ,是测试出来的。

* 测试根据是否知道源代码 

* 黑盒测试

测试者不了解程序的内部情况,不需具备应用程序的代码、内部结构和编程语言的专门知识。只知道程序的输入、输出和系统的功能,这是从用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。如集成测试(integration testing)以及系统测试(system testing)。集成测试又称组装测试,即对程序模块采用一次性或增殖方式组装起来,对系统的接口进行正确性检验的测试工作。整合测试一般在单元测试之后、系统测试之前进行。实践表明,有时模块虽然可以单独工作,但是并不能保证组装起来也可以同时工作。

* 白盒测试

白盒测试white-box testing)又称透明盒测试(glass box testing)、结构测试(structural testing)等,软件测试的主要方法之一,也称结构测试、逻辑驱动测试或基于程序本身的测试。测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。测试者了解待测试程序的内部结构、算法信息,这是从程序设计者的角度对程序进行的测试。

白盒测试可以应用于单元测试(unit testing)、集成测试(integration testing)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。

白盒测试设计技术包括以下代码覆盖标准:

  • 控制流测试
  • 数据流测试
  • 分支测试
  • 语句覆盖
  • 判定覆盖
  • 修正条件/判定覆盖
  • 主要路径测试
  • 路径测试

*根据测试的粒度 
*方法测试 funtion test  写完一个方法就测试
*单元测试:测试一个能够独立运行的业务逻辑单元
*模块测试:模块开发完后测试整个模块
*集成测试  integration test  整体测试项目 联调
*系统测试  System test

Android里面还有一些测试:

* 测试暴力程度 
* 冒烟测试 :自动高频次的点击软件,其实就是测试软件的极限值,找出bug。
* 压力测试 :比如12306。使用测试工具: LoadRunner、jmeter。

2.Android下的单元测试

*1如果想测试一个业务方法 我们首先定义一个类 extends  AndroidTestCase
*2写测试方法 
*3 要在清单文件配置:

        <instrumentation android:name="android.test.InstrumentationTestRunner"                

    android:targetPackage="com.qaa.unittest" android:label="Tests for My App" />

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

# 3 logcat 介绍  日志猫 (以后天天用),以下的优先级从高往低排列。
* error -----红色 最高级
* warn ----- 黄色 比较高
* info ---- 绿色 一般
* debug----蓝色   较高
* verbose---黑色  一般
log.w() 打印警告信息。

# 4Android下的数据保存 (非常重要)
* 1 画界面 
* 2 点击login 按钮,判断一下 checkbox 是否已经勾选,如果勾选 我们拿到 用户名和密码的值 。
* 3 我们写了一个专门用来保存和读取的业务方法。
* 4 要在oncreate 方法中先判断一下用户名和密码是否存在,如果存在读取出来。

# 5Android把数据保存到sd卡

* 1 获取sd卡路径           

Environment.getExternalStorageDirectory().getPath()

* 2 判断sd卡是否可用,是否处于挂载的状态。

 if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))

{}

*3 一定不要忘记加写的权限。

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

* 4 只有2.3版本的有卸载和挂载的选项

# 6获取sd卡的剩余空间 (练习)

        File file = Environment.getExternalStorageDirectory();      

    long totalSpace = file.getTotalSpace();  //返回指定目录的总大小    

    long usableSpace = file.getUsableSpace();   // 返回可用的空间大小    返回的类型 是byte

       //格式化totalSpace,将long totalSpace转换成String totalSpaceSize,便于显示。这行语句应用的很广。

  String totalSpaceSize = Formatter.formatFileSize(getApplicationContext(), totalSpace); 

# 7 利用上下文获取常用的目录   Toast.(mainactivity.this)

* FileOutputStream fos = context.openFileOutput("info.txt", 0);

* FileInputStream fis = context.openFileInput("info.txt");

 # 9保存数据的另外一种方式 sharedperfance ***(非常重要 毕业后无处不用)
* 1拿到sp的对象    sp = getSharedPreferences("config", 0);
* 2 拿到sp 编辑器  Editor edit = sp.edit() ;
* 3 一定要 edit.commit()
* 原理 底层生成了一个xml文件

# 10xml 文件的生成(重要)

*1.利用sb,去组拼 StringBuilder

*2 利用XmlSerializer serializer = Xml.newSerializer(); // xml序列化器

*3 设置xml序列化器的参数:serializer.setOutput(fos, "utf-8");

*4 开始写xml    

serializer.startDocument("utf-8", true);    //namespace 命名空间    

serializer.startTag(null, "smss");        

for (Sms sms : smsLists) { 

serializer.startTag(null, "sms");          

serializer.startTag(null, "sender");     

serializer.text(sms.getSender());     

serializer.endTag(null, "sender");          

serializer.startTag(null, "content");     

serializer.text(sms.getContent());     

serializer.endTag(null, "content");         

 serializer.startTag(null, "time");     

serializer.text(sms.getTime());    

 serializer.endTag(null, "time");          

serializer.endTag(null, "sms");        

}    

serializer.endTag(null, "smss");  

serializer.endDocument();      

fos.close();

# 11xml的解析,关于城市天气的xml的解析

*dom 把整个文档作为一个树加入到内存中

*sax基于事件  

*pullparser解析

* 1 拿到一个 xmlpulparser 的解析器

* 2 设置解析器的参数 parser.setInput(in, "utf-8");

* 3 拿到解析的事件类型 

* 4   

int type = parser.getEventType();

          while (type != XmlPullParser.END_DOCUMENT) {

            type=  parser.next();           }

* 5  判断开始节点和结束节点     

         switch (type) {

    case XmlPullParser.START_TAG: // 文档的开始节点      

    if ("weather".equals(parser.getName())) {

     // 把集合给初始化出来      

    weatherLists = new ArrayList<Channel>();

     } else if ("channel".equals(parser.getName())) {       

  channel = new Channel();       

  String id = parser.getAttributeValue(0);// 拿到id熟悉       

  channel.setId(id);

     } else if ("city".equals(parser.getName())) {

      String city = parser.nextText(); // 拿到city的值       

  channel.setCity(city);

     } else if ("temp".equals(parser.getName())) {       

  String temp = parser.nextText(); // 拿到温度的值       

  channel.setTemp(temp);

     } else if ("wind".equals(parser.getName())) {      

   String wind = parser.nextText(); // 拿到温度的值       

  channel.setWind(wind);

     } else if ("pm250".equals(parser.getName())) {

      String pm250 = parser.nextText(); // 拿到温度的值      

   channel.setPm250(pm250);

     }      break;

    case XmlPullParser.END_TAG: // 结束节点    

   if ("channel".equals(parser.getName())) {

     weatherLists.add(channel);

     }

     break;

    default:      

  break;     }

posted @ 2016-01-06 09:56  蜗牛的爬行  阅读(204)  评论(1编辑  收藏  举报