(十八)JUnit与XML概括

Junit与XML


软件的生命周期和设计原则


生命周期

软件生命周期可以分为6个阶段

  1. 项目开始规划,定义:确定软件开发的目标与可行性
  2. 需求分析:对软件需要实现的功能进行需求分析
  3. 软件设计:设计每一个模块的结构,搭建整体框架
  4. 代码编写:代码编写实现部分
  5. 软件测试:对代码进行软件测试(白盒,黑盒)
  6. 运行维护:软件生命周期最长的一部分,对开发的软件进行定期维护
设计原则
  1. 可重用性 :遵循DRY(Don’t Repeat Yourself)原则
  2. 可拓展性
  3. 可维护性
模块要求
  1. 结构稳定
  2. 可拓展性
  3. 可组合性
  4. 高内聚:强调一个系模块中,每个模块值完成特定的功能,不同模块间不会有功能重叠
  5. 低耦合:强调每个模块间相互独立


编写代码遵循基本命名规范

基本命名规范:驼峰法

  • 包名:采用倒置域名: cn.k.crm.util

  • 接口名:IXxx

  • 接口实现类:Imlp结尾, XxxxImpl

  • 类名:首字母大写,名词,驼峰法

  • 方法名,变量名:首字母小写,驼峰法


jar包的导出与导入


导出

1.创建工具类与方法

在这里插入图片描述


2.将项目导出为jar包 File–>Project Structure–>Artifacts -->JAR–>From modules with dependencies

在这里插入图片描述


3.导出jar包

在这里插入图片描述


Build -->Build Artifacts -->项目名.jar -->build


导入

在项目下,新建一个lib目录,用来存放需要拷贝的jar包

在这里插入图片描述

对 lib 右键 Add as Library 导入成功

建立测试类,使用自己导入的jar包工具类方法

在这里插入图片描述


JUnit测试的使用


黑盒测试

不考虑内部结构与特性,在 程序的接口上进行测试,检查程序是否 按照需求规格说明书规定正常使用,手动测试,不用写代码


白盒测试

由开发人员进行测试,按照程序内部的结构测试程序

JUnit就是白盒测试

1.在工程目录下创建test文件夹,不要创建在src目录下

  理由:test文件夹仅仅是用来测试,不参与具体代码的运行,放在src目录下,
  如果需要打包jar,那就把test也打包进去
 (但是打包test是没有意义的,还会浪费空间)

2.可以使用idea快捷键生成testDemo

  • Alt +Enter

在这里插入图片描述

  • 选择JUnit4

在这里插入图片描述

  • 生成test测试

在这里插入图片描述


编写测试方法的要求
  1. 测试方法上面要有注解 @Test
  2. 方法必须是public修饰
  3. 方法返回值必须是void
  4. 方法不能传入参数


基本配置文件


properties文件与XML文件

使用配置文件的好处是什么?

配置文件可以用于程序的预加载,修改程序中的一些内容,不影响整体的改动,
程序去读取文件内容,不用修改整个程序,
只需修改配置文件即可,解决了"硬编码"
    硬编码:一些数据通过代码中的变量来直接实现,但是如果需要修改变量的值,
    会做到一发而牵动全身,整个程序会做出改变,
    这样导致了程序的可维护性降低,性能也会降低,甚至有可能出现bug

properties

Properties 是 Map 的实现类,为properties配置文件而搭配,方法只传String类型(与Map区别)

  • API

public void load(InputStream inStream); :通过输入流加载配置文件中的内容.

public String getProperty(String key); :通过属性名获取属性值

属性文件(资源文件.配置文件),以properties文件后缀结尾

存储特点:key=value,多对数据换行分开,等号前后不能有空格

注意事项

1.配置文件放在 resources 目录下
2.配置文件是跟着字节码走的,在字节码输出路径下编译,不会被存进jar,
3.配置文件不能有空格    

创建properties文件 创建resources(mark Directory as Resources) --> xx.properties

// db.properties
#用户密码 key和value前后不能有空格
username=root
password=123

解析properties文件
  • 普通思路
  1. 把db.properties传入文件对象,再转成输入流
  2. 创建properties对象来读取数据
public class PropertiesDemo {
    public static void main(String[] args) throws IOException {
        //创建文件对象
        File file = new File("D:\\xxx\\xxxx\\webday\\resources\\db.properties");
        InputStream inputStream1 = new FileInputStream(file);

        //创建properties对象
        Properties properties = new Properties();
        //读取流中的数据,保存到properties对象中
        properties.load(inputStream);

        //得到db数据
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        System.out.println("username = " + username);
        System.out.println("password = " + password);

    }
}

缺陷

创建文件对象时,使用了绝对路径,但是往后部署项目到mac或者Linux平台时,并没有盘符,所以导致读取失败,该方法只能用于本地项目,一旦进行整体jar打包,就会出现错误


- 正确思路

  1. 获取db.properties文件里的内容,需要经过流来加载
  2. 我们可以采用类加载器来进行加载 字节码,输出该路径下的资源文件
  3. properties对象可以读取流中的数据
public class PropertiesDemo {
    public static void main(String[] args) throws IOException {
       
        //获取类加载器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        //通过类加载器 输出路径下 资源文件  流
        InputStream inputStream = classLoader.getResourceAsStream("db.properties");

        //创建properties对象
        Properties properties = new Properties();
        //读取流中的数据,保存到properties对象中
        properties.load(inputStream);

        //得到db数据
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        System.out.println("username = " + username);
        System.out.println("password = " + password);

    }
}


XMl

XML :一种可扩展的标记语言,结构采用树状,一般作为配置文件存在,用于传输数据


语法

XML文件以 .xml结尾

  • 文档抬头声明
<?xml version="1.0" encoding="utf-8" standalone="no"?>
    1.version :版本号
    2.encoding :编码格式,文档内容编码和文件本身编码必须保持一致
    3.standalone :yes为不包含其他文档,no或者不写表示可包含也可不包含   
  • :表示XML中的元素/标签(Element),一般成对出现
  • 标签中可带有属性 属性名=“属性值”(数字也要双引号)
  • XML中,有且只有一个根标签(根节点)
  • XML中,严格区分大小写
  • XML中,标签不允许交叉嵌套
  • 注释

XML大致可以分为4类来描述

1.XML文件:首先得有文件 使用 document对象来描述
2.标签/元素: element对象描述
3.标签属性:  attr(attribute),Attribute对象描述
4.文本内容: text,Text描述

上述4中成员中的共性,抽象成父类org.w3c.dom.Node,这种把XML文档加载到内存后,形成的对象,该操作我们称 DOM解析


Document对象的获取

读取xml文件

  1. 获取类加载器
  2. 通过类加载器 加载 字节码输出路径下的资源文件
  3. 获取DocumentBuilderFactory对象 newDefaultInstance()
  4. 获取DocumentBuilder对象
  5. 获取Document对象

一般找不到类构建对象方法时,可以找其类构造器或者工厂类对象 xxxBuilder / xxxFactory

public class XmlDemo {
    public static void main(String[] args) throws Exception {
      
        //获取类加载器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        //通过类加载器 加载 字节码输出路径下的资源文件
        InputStream inputStream = classLoader.getResourceAsStream("contacts.xml");

        //获取DocumentBuilderFactory对象
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newDefaultInstance();

        //获取DocumentBuilder对象
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

        //获取Document对象
        Document document = documentBuilder.parse(inputStream);
        //System.out.println("document = " + document);        

    }
}

操作

获取联系人信息

首先需要获取跟节点/跟标签
再获取下面的linked标签linkman ,
获取第几个联系人的标签
获取该联系人的name标签
private static void getLinkedName(Document document) {

        //获取跟节点
        Element rootEle = document.getDocumentElement();
        //获取lenked标签linkmans
        NodeList linkmans = document.getElementsByTagName("linkman");
        //获取第二个联系人linkman
        Element linkman = (Element)linkmans.item(1); //索引从0开始 ,可以将Node强转为element子接口
        //获取name标签
        Element nameEle = (Element) linkman.getElementsByTagName("name").item(0);
        //获取name中的文本内容 ,父接口Node,提供了getTextContent()
        String textContent = nameEle.getTextContent();
        System.out.println("textContent = " + textContent);

    }


插入

获取根节点
添加新的标签内容,创建新的标签对象
添加属性
设置标签名
设置文本内容
把设置的东西关联到标签中
添加到Document中
最后将新增内容同步到 xml文件中
private static void addLinkedDocument(Document document) throws TransformerException {
    Element rootEle = document.getDocumentElement();
    //创建新标签
    Element linkman = document.createElement("linkman");
    //添加属性
    linkman.setAttribute("id","3");

    Element name = document.createElement("name");
    Element email = document.createElement("email");
    Element address = document.createElement("address");
    Element group = document.createElement("group");

    //设置文本内容 Node提供了setTextContent():返回此节点及其后代的文本内容
    name.setTextContent("小月");
    email.setTextContent("1314");
    address.setTextContent("佛山");
    group.setTextContent("幼儿园");

    //关联 Node提供 appendChild():添加子节点,联系起来
    linkman.appendChild(name);
    linkman.appendChild(email);
    linkman.appendChild(address);
    linkman.appendChild(group);

    rootEle.appendChild(linkman); //添加到根节点上

    //同步 document的内容 到xml文件中
    /*使用Transformer
    * 通过TransformerFactory.newTransformer获取实例
    *
    * */
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    //resource 输入源,内存中的Document,使用DOMSource(doc)实现类
    //StreamResult:充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记
    transformer.transform(new DOMSource(document),new StreamResult("D:\\JavaWolf\\Projects\\webday\\resources\\contacts.xml"));

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值