Android学习笔记 day02 _ 测试 & 文件读写操作
一、 测试的相关概念
根据是否知道源代码分类:
黑盒测试: a - b - c 边值测试 白盒测试: 根据源代码写测试方法 或者 测试用例
根据测试的粒度分类:
方法测试:写完一个方法后就测试 单元测试:测试一个能够独立运行的业务逻辑单元; 集成测试:整体测试项目 联调 系统测试:对整个系统进行测试
根据测试的暴力程度:
1、冒烟测试:高频次的点击软件 2、压力测试:使用测试工具:LoadRunner、Jmeter
二、 单元测试
单元测试步骤
写一个业务类,写一个业务方法
写一个测试类,继承AndroidTestCase,写一个测试方法,用来测试业务方法
在manifest文件中添加测试需要的包
<!-- 添加指令集,添加到manifest节点的里面,指令集会把应用程序部署到模拟器上运行 --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.itheima.junit"></instrumentation> <!-- 添加JUnit的测试包 ,添加到application节点的里面--> <uses-library android:name="android.test.runner"/>
三、 把数据存储到文件
Android应用程序存储数据的方式:
1. 保存到文件
2. SQLite数据库
3. 内容提供者
4. sharedproferrences
5. 网络
四、 写入文件数 & 读取文件数据
写入文件数据
1. 创建一个文件,指定文件路径
2. 创建一个文件输出流,把数据写到文件上
3. 关闭输出流。
读取文件数据
1. 指定读取的文件路径
2. 创建输入流,读取文件并封装到对象中
3. 关闭输入流
五、 往SD卡中写数据
1. 获取SD卡路径:Environment.getExternalStorageDirectory()
2. 在清单文件中添加访问SD卡的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3. 获取SD卡容量
获取文件目录总容量:file.getTotalSpace();
获取文件目录剩余容量:file.getUsableSpace();
六、 文件权限的概念
文件的4种操作模式:
1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,
在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用
Context.MODE_APPEND
2. Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
3. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
4. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
七、 使用序列化器生成一个xml文件
1. 创建xml序列化对象
XmlSerializer serializer = Xml.newSerializer();
String path = Environment.getExternalStorageDirectory().getPath();
System.out.println(path);
File file = new File(path, "smsBackup2.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");
// 写xml头文件 第二个参数代表是否是一个独立xml文件
serializer.startDocument("utf-8", true);
// 写xml根节点 第一个参数:命名空间 不需要
serializer.startTag(null, "smss");
// 写xml子节点
for (Sms sms : smsList) {
...
// 封装数据
...
}
serializer.endTag(null, "smss");
// 生成xml文件
serializer.endDocument();
fos.close();
八、 使用pull解析xml格式的数据
// 创建解析器
XmlPullParser parser = Xml.newPullParser();
try {
// 设置解析器初始化参数
parser.setInput(is, "utf-8");
// 解析XML
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
// 解析到开始节点
case XmlPullParser.START_TAG:
// 判断根节点
if ("weather".equals(parser.getName())) {
weatherLists = new ArrayList<Weather>();
// 判断子节点
} else if ("channel".equals(parser.getName())) {
weather = new Weather();
weather.setId(parser.getAttributeValue(0));
}
// 设置元素节点
...
break;
// 解析到结束节点
case XmlPullParser.END_TAG:
if("channel".equals(parser.getName())){
weatherLists.add(weather);
}
break;
}
type = parser.next();
}