JavaWeb01 Junit-配置文件与xml-文件

04-JavaWeb Junit-配置文件与xml-文件 要点

Javaweb端的开发环境

idea:2019.3.5

JDK:11

软件生命周期

生命周期就是软件从立项到结束停用的过程

1. 软件项目的定义和规划:   确定开发目标和可行性研究报告
2. 需求分析:      	      对软件需要实现的功能进行分析.一般由策划部和研发部共同分析
3. 软件设计:			 根据需求分析的结果,分模块,一般由研发部的架构师或者是项目经理设计
4. 程序编码:	          在这个过程需要统一的规范.
5. 软件测试: 		      一般由研发部和测试部完成
6. 运行维护:              运行维护的时间占整个软件生命周期的80%

软件设计原则

软件设计原则是为了提高软件的开发效率 , 降低开发的成本

软件系统特点:

  1. 可重用性:应当DRY原则,减少重复代码
  2. 可拓展性:不改变软件现有的结构,也不影响已存在的模块,就可新增模块
  3. 可维护性:当需求发生改变的时候,只需要改变少量的代码

模块的要求:

  1. 结构稳定
  2. 可拓展性
  3. 可组合性
  4. 高内聚性
  5. 低耦合性

基本命名规范

多个字母使用驼峰命名法,见名知意,数字不能开头,由大小写字母,数字,下划线,$符号组成

包名: 全部小写 , 域名倒置+其他名,两个包之间用 . 隔开

接口名: 首字母用 I ,例如IUserArrays,I表示iterface,表示接口的意思,驼峰命名法

接口实现类: 命名末尾使用Impl结尾 , 表示为接口的实现类 , 例如UserArrayImpl;驼峰命名法

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

方法名: 首字母小写 , 驼峰命名法

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

常量名: 全部大写 , 多个单词用_下划线隔开;适用于public static final 修饰的常量 : MAX_STOCK_COUNT

jar包

jar包相当于jdk,里面一般是封装好的工具类,如果需要导入jar包,一般创建一个lib包存放拷贝的jar包,如果需要使用该jar包需要 Add as Library。。

jar包导入

C:\Users\古\AppData\Roaming\Typora\typora-user-images\image-20210302210613534.png
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

单元测试

黑盒测试

相当于把程序放入一个黑盒子中,输入什么应该输出什么,检查程序是否可以正常使用,一般由测试部门完成

黑盒测试不需要写代码

**作用:**是否有以下的错误:

  • 界面是否有误;
  • 输入和输出是否有问题;
  • 数据库访问是否有问题;
  • 性能是否有问题;
  • 初始化和终止错误等。

白盒测试

需要写代码来测试,一般由开发人员测试

作用:

  • 检查程序内部结构是否存在遗漏
  • 功能是否完成
  • 功能是否有错
  • 是否按照规格说明书实现

JUnit

JUnit为白盒测试,一般使用Junit4.x

手动方法

前面以需要测试的类或接口名为头,以Test为结尾命名例如接口IUserDAO的测试类为UserDAO

注解应写上@Test

package cn.wolfcode.day01.test;

import org.junit.Test;

import static org.junit.Assert.*;

public class UserDAOTest {

    // 注解一定要写上@Test
    /**
    @Test
    public void 方法名(){
    
    }
    public : 公共的
    void : 无返回
    */
    @Test
    public void add() {
    }

    @Test
    public void delete() {
    }
}

快捷方法

一般测试类需要一个统一的包test,并改为测试目录
在这里插入图片描述

快捷测试
在这里插入图片描述

Junit4:
在这里插入图片描述

配置文件

一般配置文件就是为了解决程序的硬编码问题

硬编码问题 : 当程序变量需要改变时 , 就需要改代码 , 工作量就会加大

如何解决硬编码问题 : 把需要修改的内容写在一个普通的文件中,让程序去读,程序只需要修改普通文件就好了

properties文件和XML文件

  • 配置文件需要存放在resource包中 , 需创建
  • 配置文件都是字符串,不需要使用引号
  • 不需要使用空格
    在这里插入图片描述

properties文件

properties文件又称为属性文件,以properties为后缀

存数据特点 : key=value 格式,多对数据使用换行分开

username=root
password=admin

如何解析properties文件?

1.使用Map方法

import java.io.*;
import java.util.Properties;

public class PropertiesDemo {

    public static void main(String[] args) throws IOException {
        File file = new File("E:\\idea-workspace\\day01_junit_xml\\resources\\db.properties");
        InputStream inputStream = new FileInputStream(file);
        Properties properties = new Properties();
        // 读取流中的数据,并保存到properties对象中
        properties.load(inputStream);
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        System.out.println("username = " + username);
        System.out.println("password = " + password);
    }
}

2.使用类加载器 , 直接从字节码的输出路径读取配置文件

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

public class DOMDemo {
    /**
     * 创建Document对象
     *  1. 首先需要获取一个类加器
     *  2. 通过类加载器 加载 字节码输出路径下面的资源文件
     *  3. 先获取documentBuilderFactory 对象
     *  4. 再获取documentBuilder 对象
     *  5. 最后通过documentBuilder.parse(inputStream)方法获取document 对象
     *
     *  接口不能创建对象,可以去 同名+Builder工厂类 或者 同名+Factory 工厂类 中使用静态方法创建该实例
     */

    public static void main(String[] args) throws Exception {
        // 获取累加器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        // 通过类加载器 加载 字节码输出路径下面的资源文件
        InputStream inputStream = classLoader.getResourceAsStream("contacts.xml");
        // 获取documentBuilderFactory 对象
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        // 获取documentBulider 对象
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        // 获取document 对象
        Document document = documentBuilder.parse(inputStream);
        // System.out.println("document = " + document);

    }

XML文件

XML语法:

<?xml version="1.0" encoding="utf-8"?>
<!-- 以上文档声明,versino:版本,
encoding 编码格式:文档内容编码和文件本身编码必须保持一致-->
<根元素>
    <a>a</a>
    <b>b</b>
	<c/>
    <!-- -->
</根元素>
注意:
1.必须只能有一个根便签
2.不能交叉嵌套
3.注解使用 <!-- -->
4.<x>出现必有</x>
5.<x/>可以单独存在
6.<x id="1">标签可以有属性
7.严格区分大小写
8.<?xml version="1.0" encoding="utf-8"?>声明
9.<>表示元素/标签

XML结构:

<?xml version="1.0" encoding="utf-8"?>
        <!-- 以上文档声明,versino:版本,
        encoding 编码格式:文档内容编码和文件本身编码必须保持一致-->
<contacts>
    <linkman id="1">
        <name>小狼</name>
        <email>wolf@wolfcode.cn</email>
        <address>广州</address>
        <group>Java学院</group>
    </linkman>
        <linkman id="2">
        <name>小码</name>
        <email>horse@520it.com</email>
        <address>广州</address>
        <group>Java学院</group>
    </linkman>
</contacts>

层次结构整理:

在这里插入图片描述

XML的组成:

1.XML文件 : 用Document对象来描述
2.标签/元素 : 用Element对象来描述
3.属性 : 用Attribute来描述
4.文本 : 用Text类描述

Document,Element,Attribute,Text为Node子类

如何获取Document对象?

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

public class DOMDemo {
    /**
     * 创建Document对象
     *  1. 首先需要获取一个类加器
     *  2. 通过类加载器 加载 字节码输出路径下面的资源文件
     *  3. 先获取documentBuilderFactory 对象
     *  4. 再获取documentBuilder 对象
     *  5. 最后通过documentBuilder.parse(inputStream)方法获取document 对象
     *
     *  接口不能创建对象,可以去 同名+Builder工厂类 或者 同名+Factory 工厂类 中使用静态方法
     */

    public static void main(String[] args) throws Exception {
        // 获取累加器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        // 通过类加载器 加载 字节码输出路径下面的资源文件
        InputStream inputStream = classLoader.getResourceAsStream("contacts.xml");
        // 获取documentBuilderFactory 对象
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        // 获取documentBulider 对象
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        // 获取document 对象
        Document document = documentBuilder.parse(inputStream);
        // System.out.println("document = " + document);

    }

如何获取联系人信息:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

public class DOMDemo {
    /**
     * 创建Document对象
     *  1. 首先需要获取一个类加器
     *  2. 通过类加载器 加载 字节码输出路径下面的资源文件
     *  3. 先获取documentBuilderFactory 对象
     *  4. 再获取documentBuilder 对象
     *  5. 最后通过documentBuilder.parse(inputStream)方法获取document 对象
     *
     *  接口不能创建对象,可以去 同名+Builder工厂类 或者 同名+Factory 工厂类 中使用静态方法
     */

    public static void main(String[] args) throws Exception {
        // 获取累加器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        // 通过类加载器 加载 字节码输出路径下面的资源文件
        InputStream inputStream = classLoader.getResourceAsStream("contacts.xml");
        // 获取documentBuilderFactory 对象
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        // 获取documentBulider 对象
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        // 获取document 对象
        Document document = documentBuilder.parse(inputStream);
        // System.out.println("document = " + document);

        // 需求:获取第二个联系人名称
        getLinkmanName(document);
    }

    /**
     *  1. 首先根据document 对象获取根节点
     *  2. 获取根节点下的linkman对象
     *  3. 再获取linkman 对象 的第二联系人标签
     *  4. 最后获取 name标签
     */

    private static void getLinkmanName(Document document) {
        // 根据document 对象获取根节点
        Element rootEle = document.getDocumentElement();
        // 获取下面的linkman标签
        NodeList linkmans = rootEle.getElementsByTagName("linkman");
        // 获取第二联系人标签
        Element linkman = (Element) linkmans.item(1);
        // 获取name 标签
        Element nameEle = (Element) linkman.getElementsByTagName("name").item(0);
        String textContent = nameEle.getTextContent();
        System.out.println("textContent = " + textContent);
    }
}

如何获取添加一个联系人信息?

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.concurrent.TransferQueue;

public class DOmDemo02 {

    public static void main(String[] args) throws Exception {
        // 获取累加器
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        // 通过类加载器 加载 字节码输出路径下面的资源文件
        InputStream inputStream = classLoader.getResourceAsStream("contacts.xml");
        // 获取documentBuilderFactory 对象
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        // 获取documentBulider 对象
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        // 获取document 对象
        Document document = documentBuilder.parse(inputStream);
        // System.out.println("document = " + document);

        // 需求:添加一个联系人信息
        addLinkmanInfo(document);
    }

    /**
     *     <linkman id="1">
     *         <name>小狼</name>
     *         <email>wolf@wolfcode.cn</email>
     *         <address>广州</address>
     *         <group>Java学院</group>
     *     </linkman>
     * @param document
     *
     *   1. 首先查找document的根节点
     *   2. 创建标签对象
     *   3. 添加其属性
     *   4. 设置文本信息
     *   5. 关联联系人
     *   6. 添加联系人
     *   7. 同步document 的内容到xml文件中
     */

    private static void addLinkmanInfo(Document document) throws TransformerException, FileNotFoundException {
        
        // 1. 首先查找document的根节点
        Element documentElement = document.getDocumentElement();
        // 2. 创建标签对象
        Element linkman = document.createElement("linkman");
        // 3. 添加标签对象的属性
        linkman.setAttribute("id","3");

        Element name = document.createElement("name");
        Element email = document.createElement("email");
        Element address = document.createElement("address");
        Element group = document.createElement("group");
        // 4. 设置标签对象的文本信息
        name.setTextContent("小狼");
        email.setTextContent("wolf@wolfcode.cn");
        address.setTextContent("广州");
        group.setTextContent("Java学院");
        // 5. 关联联系人
        linkman.appendChild(name);
        linkman.appendChild(email);
        linkman.appendChild(address);
        linkman.appendChild(group);

        // 6. 添加联系人
        documentElement.appendChild(linkman);

        // 7. 同步document 的内容到XML 文件中
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult(new FileOutputStream(new File("E:\\idea-workspace\\day01_junit_xml\\out\\production\\day01_junit_xml\\contacts.xml"))));
    }
}

linkman.appendChild(email);
    linkman.appendChild(address);
    linkman.appendChild(group);

    // 6. 添加联系人
    documentElement.appendChild(linkman);

    // 7. 同步document 的内容到XML 文件中
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(new DOMSource(document),new StreamResult(new FileOutputStream(new File("E:\\idea-workspace\\day01_junit_xml\\out\\production\\day01_junit_xml\\contacts.xml"))));
}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值