目录
软件的生命周期与设计原则(了解即可)
测试分类
单元测试 JUnit
三个版本:
测试类目录:将普通目录 test 改为测试目录(Test Soruces Root)
创建测试包和测试类(一般被测试包和测试类相同,只有测试类多加了Test)
配置文件
properties 文件
语法特点
解析 properties 文件
常用的 API
2 .ClassLoader 类加载器
获取 ClassLoader 对象方式
xml 文件(能够看得懂xml语法,能够书写和修改xml内容即可)
解析 xml 文件
DOM
后期使用场景
使用 JavaScript (js)来解析 HTML 中的数据.
特点
缺点
Document 获取(掌握)
常用API
步骤:
生命周期 | 设计原则 |
1.问题的定义及规划 | 1.可重用性 |
2. 需求分析 | 2.可拓展性 |
3.软件设计 | 3.可维护性 |
4.程序编码 | 4.高内聚性 |
5. 软件测试 | 5.低耦合性 |
6.运行维护 |
黑盒测试 | 白盒测试 |
也称功能测试,是通过测试来检查每个功能是否能正常使用,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序的接口上进行测试,检查程序功能是否 按照需求规格说明书 的规定正常实现 | 由开发人员来测试,又称结构测试、透明盒测试、逻辑驱动测试或 基于代码 的测试。它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常执行。测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。 |
作用 | |
黑盒测试主要试图发现下列几类错误 | 白盒测试主要做以下代码测试 |
功能是否不正确或遗漏 | 检查程序内部结构是否存在遗漏; |
界面显示是否正确 程序功能是否完成; | 输入和输出是否错误 程序功能是否有错; |
数据库访问是是否错误 | 程序功能是否按规格说明书实现 |
性能是否有问题 | 初始化和终止是否有问题等 |
junit3.x 针对于 Java5 之前的版本, android 中使用,不推荐.
junit4.x 针对于 Java5 以及之后的版本,使用注解,推荐.
junit5.x 针对于 Java8 以及以后的版本.使用注解&让测试更精简,更推荐.
注意:测试方法
必须是 public 修饰
命名是以test开头,Xxx表示测试的功能
无参、无返回
贴有 @Test 标签
在 @Test 按提示快捷键 Alt+Enter ,导入 JUnit4 的依赖包
生成测试类快捷键:选中要测试的类名 Alt + Enter
在 IT 行业中,习惯使用两种具有特殊特点的文件来作为配置文件,分别是 properties 文件 和 XML 文件
拓展名为 .properties 的文件称为属性文件/资源文件/配置文件
1.数据以key=value键值对的形式存在
2.多对数据使用换行分开
user.properties(例)
username=root
password=admin
使用注意事项:
1 在配置文件中,所有的数据都是字符串,不需要使用" ",注释用 # 号。
2 在配置文件中不能出现空格
3 配置文件是给程序去读取的,所以必须跟字节码走,需要放在 Resources Root 类型的目录中,idea会直接拷贝到字节码路径下。
使用步骤:
1 创建普通文件夹 resources
2 将文件夹改为 Resources Root 目录(特性:编译后,里面的文件会被拷贝到字节码根路径下)
3 在目录中创建配置文件
4 在 resources 目录下创建文件,命名为 user.properties(例),内容如上
1.Properties 类: 是 Map 的实现类,继承 Map 的所有操作方法(get,put....),但 Map 中的方法,咱们一般不用。因为 properties 文件比较特殊,存的都是字符串,所以使用 Properties 类新增的方法.
public void load(InputStream inStream); // 通过输入流加载配置文件中的内容.
public String getProperty(String key); // 通过属性名获取属性值
/**
在开发中绝对不能使用绝对路径。因为以后项目会移动,路径会被改动,只能使用相对路径。
由于配置文件跟着字节码走,所以可以相对于字节码根路径来读取文件
*/
JDK 自带类 ClassLoader 中有个实例方法 getResourceAsStream(),可以从字节码根路径下读取文件转为输入流。
Thread.currentThread().getContextClassLoader() : 推荐使用,直奔主题获取对象。
步骤
//从字节码输出路径读取文件转为输入流
// 1 确定源和创建管道
ClassLoader 变量1 = Thread.currentThread().getContextClassLoader();
InputStream 变量2 = classLoader.getResourceAsStream("获取的文件名");
// 2创建Properties对象
Properties 变量3 = new Properties();
// 3用 load 方法解析配置文件中的内容
变量3.load(变量2);
// 4从 Properties 对象中获取解析出来的数据
变量3.getProperty(String key);
例:
public class ParseFileTest{
@Test
public void testParseProperties(){
// 1 从字节码输出路径读取文件转为输入流,供 Properties 的 load 方法使用
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream is = classLoader.getResourceAsStream("user.properties");
Properties p = new Properties();
// 2 用 load 方法解析配置文件中的内容
p.load(is);
// 3 从 Properties 对象中获取解析出来的数据
String username = p.getProperty("username");
String password = p.getProperty("password");
System.out.println(username + "," + password);
}
}
XML是一种 可扩展的标记语言( 使用 <> 标记括起来 ),做数据交互的媒介,用于传输数据,解决硬编码问题
语法特点:以 .xml 结尾的文件
语法要求
1 xml文档需在文档第一行做声明,声明表示该文档为xml文档
version: xml 的版本 (了解)
encoding:编码格式,文档内容的编码和文件的编码需要统一(UTF-8)(重要)
2 在 XML 文档中,必须有且仅有一个根标签
3 <>标记在XML 文档中表示标签/元素(Element),标签中可以存数据
标签有内容需成对儿出现,开始标签
标签如果没内容可使用单标签
注意:
1.在XML中,标签严格区分大小写
2.允许标签嵌套,但是不允许交叉嵌套
4 标签中可以带有属性,格式: 属性名=“属性值” ,id="1"
(在 XML 中,注释可以使用快捷键 ctrl + shit + / )
XML 的各个组成部分用一个类型来描述.
1. XML 文件:把 XML文档加载到内存中,使用 Document 对象来描述整个文档.
2. 标签/元素:所有的标签,使用 Element 对象来描述.
3. 属性:标签的属性,使用 Attribute 来描述.
4. 文本:文本内容(包含文字、空格、回车)使用 Text 来描述.
根据上面四种成员的共性,继续抽象出父类:Node.所以说,在XML中,一切皆节点,而这种把 XML 文档加载到内存之后,形成一个一个的对象,这种操作我们称为 DOM 解析。
文档对象模型,把文档中的成员描述成一个个对象.
1.在加载的时候,一次性把整个 XML文档加载进内存,在内存中形成一颗树(Document对象)/DOM树.
2.我们以后使用代码操作 Document,其实操作的是内存中的 DOM树,和本地磁盘中的XML文件没有直接关系.比如: 保存了一个联系人, 仅仅是内存中多了一个联系人,但是在XML文件中没有新增的痕迹.除非做 同步操作(把内存中的数据更新到XML文件).-----> 增删改操作完之后,都需要做同步操作
1.若 XML 文件过大,可能造成内存溢出.
2.操作 XML 的增删改查(CRUD)的时候很简单,但是性能比较低下.
XML 被程序读到内存中会形成一个 Document 对象,如果需要解析 XML ,首先得先获取到 Document对象
1-.获取文档 Document 对象的步骤:
// 1 确定源和创建管道
ClassLoader 变量1 = Thread.currentThread().getContextClassLoader();
InputStream 变量2 = classLoader.getResourceAsStream("获取的文件名");
// 2 创建解析器
SAXReader 变量3 = new SAXReader();
// 3 加载xml文件并解析文件
Document 变量4 = 变量3.read(变量2);
Document 类成员方法
Element getRootElement():Document的方法,用来获取根元素;
Element 类成员方法
List elements():用来获取所有子元素
Element element(String name):用来获取第一个指定名字的子元素;
String getText() 用于获取元素的文本内容
//1.获取 Document 对象.
上面1-的方法
//2.获取根节点/根标签.
Element 变量5 = 变量4.getRootElement();
List 变量6 = 变量5.elements();
//3.获取第二个 linkman 节点.
Element 变量7 = 变量6.get(获取的元素索引);
//4.获取名字节点.
Element 变量8 = 变量7.element("要获取的节点名");
//5.获取名字节点的文本内容.
变量8.getText();
代码实现(例)
// 1 获取根元素
Element root = document.getRootElement();
List list = root.elements();
// 2 获取第一个linkman元素
Element linkManEle = list.get(0);
Element nameEle = linkManEle.element("name");
String name = nameEle.getText();
System.out.println("name = " + name);