1测试的相关概念
[1] 好的软件不是开发出来的是不断测试出来的
[2] 当当 1 2 3 -8 京东:
1.1 根据是否知道源代码分为
黑盒(功能测试):
白盒(知道源代码自己写测试代码):
1.2 根据测试的力度
方法测试
单元测试
集成测试:安卓客户端写好了,网络接口也写好了,集成在一起进行测试
系统测试
1.3 根据测试的暴力程度
压力:12306 过年时卡得很
冒烟:谷歌工程师给我们提供了一个money+1000(次数)可以进行压力测试
2 单元测试
测试的业务方法!
[1]定义一个类继承AndroidTestCase
[2]在清单文件中配置use-library和instrumentation(上图的红色部分,注意其位置)
[3]如果上面的东西搞丢了 可以这样配置:可以自己手动创建一个Android的测试工程,在测试工程里面都会自动配置好。
3 日志猫的使用
要求会加过滤器!
4 使用上下文获取常见目录
【1】String path = context.getFilesDir().getPath();
【2】使用上下文快速获取文件的输出流和输入流
FileOutputStream fos = context.openFileOutput("infoo.txt”,0);
FileInputStream fis = context.openFileInput("infoo.txt");
5 登录数据存储到SD卡
往SD卡存储数据需要获取权限:WRITE_EXTERNAL_STORAGE
【1】获取SD卡的目录
String sdPath = Environment.getExternalStorageDirectory().getPath();
File file = new File("sdPath","haha.txt");
【2】判断SD卡是否可用
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
Toast.makeText(MainActivity.this,"SD卡可用",1).show();
}else{
Toast.makeText(MainActivity.this,"SD卡不可用",1).show();
}
6 获取SD卡可用空间
//[1]找到我们关心的控件
TextView tv_total_size = (TextView)findViewById(R.id.textView1);
TextView tv_usable_size = (TextView) findViewById(R.id.textView2);
//[2]获取SD卡总大小和可用空间
File file =Environment.getExternalStorageDirectory();
long totalSpace = file.getTotalSpace();//总大小
long usableSpace = file.getUsableSpace();//可用空间
//[3]转换数据格式
String formatTotalSize = Formatter.formatFileSize(this, totalSpace);
String formatUsableSize = Formatter.formatFileSize(this, usableSpace);
//[4]展示到TextEdit上
tv_total_size.setText("总大小:"+formatTotalSize);
tv_usable_size.setText("可用大小:"+formatUsableSize);
7 文件权限的介绍
修改文件权限-->使用Linux下一个指令(chmod)步骤:
cmd-->敲指令:adb shell-->cd 到修改文件的目录-->chmod 777要修改文件权限的文件名(eg:private.txt)
8 SharedPreferences介绍
【1】获取sp的实例
sp = getSharedPreferences("config",0);
【2】获取编辑器
Editor edit = sp.edit();
【3】存数据
edit.putString("name",name);
edit.putString("pwd",pwd);
【4】一定要commit
edit.commit();
9 生成xml的第一种方式(StringBuffer自己组拼)
//[1]初始化我们要备份的数据
smsLists = new ArrayList<Sms>();
for(int i = 0; i < 10; i++)
{
Sms sms = new Sms();
sms.setAddress("10086"+i);
sms.setBody("nihao"+i);
sms.setDate("201"+i);
//[2]把sms对象加入到集合中
smsLists.add(sms);
}
}
//点击按钮 通过StringBuffer的方式生成一个xml文件
public void click(View v)
{
//[1]创建sb对象
StringBuffer sb = new StringBuffer();
//[2]开始组拼xml文件头
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//[3]开始组拼xml根节点
sb.append("<smss>");
//[4]开始组拼smss结点
for(Sms sms:smsLists)
{
sb.append("<sms>");
//[5]开始组拼address结点
sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>");
//[6]开始组拼body结点
sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>");
//[7]开始组拼date结点
sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>");
sb.append("</sms>");
}
sb.append("</smss>");
//[8]把数据保存到sd卡中
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "smsbackup.xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
10 生成xml的第二种方式(使用xml序列化器)
try {
//[1]获取XmlSerializer类的实例 通过X买了这个工具类去获取
XmlSerializer serializer = Xml.newSerializer();
//[2]设置serializer序列化器参数
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup2.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");
//[3]开始写xml文档开头
serializer.startDocument("utf-8", true);
//[4]开始写xml文档的根节点 namespace:命名空间
serializer.startTag(null, "smss");
//[5]循环写sms结点
for (Sms sms : smsLists) {
serializer.startTag(null, "sms");
//[6]开始写address结点
serializer.startTag(null, "address");
serializer.text(sms.getAddress());
serializer.endTag(null, "address");
//[7]开始写body结点
serializer.startTag(null, "body");
serializer.text(sms.getBody());
serializer.endTag(null, "body");
//[8]开始写date结点
serializer.startTag(null, "date");
serializer.text(sms.getDate());
serializer.endTag(null, "date");
//sms结点结束
serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
//写文档的结尾
serializer.endDocument();
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
11 XML的解析
[1] Xml的数据来源 来源于服务器 服务器的开发人员通过服务器的技术把数据准备一个xml返回给客户端。
[2] 对于Android的开发人员 只需要做解析的操作,把我们关心的数据取出来就可以了!
[3]服务器是以流的形式把数据返回
解析步骤:
[1] 获取XmlPullParser解析的实例
XmlPullParser parser = Xml.newPullParser();
[2]设置XmlPullParser的参数
parser.setInput(in, "utf-8");
[3]获取事件类型
int type = parser.getEventType();
[4]具体判断一下解析到了哪个节点
while(type!=XmlPullParser.END_DOCUMENT)
while(type!=XmlPullParser.END_DOCUMENT)
{
//具体判断一下解析到了哪个节点
switch (type) {
case XmlPullParser.START_TAG: //解析开始标签
//[4]具体判断一下解析到是哪个开始标签、
if ("weather".equals(parser.getName())) {
//创建一个集合对象
weatherlists = new ArrayList<Channel>();
}
else if("channel".equals(parser.getName()))
{
//[6]创建Channel对象
channel = new Channel();
//[7]获取id值
String id = parser.getAttributeValue(0);
channel.setId(id);
}
else if("city".equals(parser.getName()))
{
//[8]获取city的数据
String city = parser.nextText();
channel.setCity(city);
}
else if("temp".equals(parser.getName()))
{
//[9]获取temp的数据
String temp = parser.nextText();
channel.setTemp(temp);
}
else if("wind".equals(parser.getName()))
{
//[10]获取wind的数据
String wind = parser.nextText();
channel.setWind(wind);
}
else if("pm250".equals(parser.getName()))
{
//[11]获取pm250的数据
String pm250 = parser.nextText();
channel.setPm250(pm250);
}
break;
case XmlPullParser.END_TAG: //解析结束标签
//具体判断一下要解析的结束标签
if ("channel".equals(parser.getName())) {
//把javabean对象存到集合中
weatherlists.add(channel);
}
break;
}
//不停的向下解析
type = parser.next();
}