小工具知识网

当前位置: 首页 > 行业知识 > 26.java-单元测试&xml&注解

行业知识

26.java-单元测试&xml&注解

2026-10-19 16:28:43 来源:互联网转载

单元测试&xml&注解

单元测试

  • 单元���试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对 Java 方法的测试,进而检查方法的正确性。

    • 简单理解 : 就是一个测试代码的工具
    • 目前测试代码的弊端 :

      • 现在只能在main方法中测试代码, 如果一个方法的测试失败了,其他方法测试会受到影响
      • Junit 的优点 :

        • JUnit 可以灵活的选择执行哪些测试方法,可以一键执行全部测试方法。
        • 单元测试中的某个方法测试失败了,不影响其他方法的测试。
        • 运行成功是绿色,运行失败是红色
          快速入门 :
          • 认知 : Junit 测试的方法, 必须是public的, 没有参数, 没有返回值的
            1. 手动导入jar包 | 在有外部网络的情况下根据提示敲回车2. 在需要测试的方法上, 加入@Test注解3. 运行绿色(正确) 红色(错误)

            XML 引入

            ​ 配置文件

            好处 :

            • 可以让项目中使用的数据, 灵活的加载和多变, 实现解耦

              分类 :

              • Properties : 常用于一对一的存储
                • 键值对
                • username=root
                • password=123456
                • xml : 常用于一对多的存储

                  XML 介绍

                  ​ XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言。

                  • 标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
                  • 可扩展:标签的名字是可以自己定义的
                    优势 :
                    • 作为软件的配置文件
                    • 用于进行存储数据和传输数据
                      • 传输的理解, 主要还是喜欢它里面的格式

                        4. XML 语法

                        语法规则 :
                        • 创建

                          • 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
                          • 文档声明

                            文档声明必须是第一行第一列

                            • version:该属性是必
                            • encoding:该属性不是必须的
                              • 打开当前xml文件的时候应j
                              • 0该是使用什么字符编码表(一般取值都是UTF-8)
                              • standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
                              • 标签规则

                                • 必须存在一个根标签,有且只能有一个
                                  • 标签由一对尖括号和合法标识符组成

                                     
                                  • 标签必须成对出现

                                     前边的是开始标签,后边的是结束标签
                                  • 特殊的标签可以不成对, 但是必须有结束标记

                                     
                                  • 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来

                                     
                                  • 标签需要正确的嵌套

                                    这是正确的:      张三        这是错误的:     张三    
                                    • 细节

                                      • XML文件可以定义注释信息:
                                      • XML文件可以存在以下特殊字符
                                        <  大于&&  和号'’  单引号"”  引号
                                        • XML文件中可以存在CDATA区:
                                          • CDATA是特殊数据区,里面可以写任意
                                            案例解析
                                            /*需求 :  编写一个城市对应区的 xml 文件城市:  city 区域 :  area*/

                                            XML 约束 (了解)

                                            这东西以后都不会自己写

                                            介绍 :
                                            • 用来限定xml文件中可使用的标签以及属性
                                              分类 :
                                              • DTD 约束
                                              • schema 约束
                                                DTD 约束

                                                编写DTD约束

                                                • 步骤

                                                  1. 创建一个文件,这个文件的后缀名为.dtd

                                                  2. 看xml文件中使用了哪些元素

                                                    可以定义元素
                                                  3. 判断元素是简单元素还是复杂元素

                                                    简单元素:没有子元素。

                                                    复杂元素:有子元素的元素;

                                                • 代码实现

                                                   
                                                • 引入DTD约束

                                                  • 引入本地dtd

                                                     
                                                  • 在xml文件内部引入

                                                     
                                                  • 引入网络dtd

                                                     
                                                  • 引入本地DTD约束

                                                    // 这是persondtd.dtd文件中的内容,已经提前写好// 在person1.xml文件中引入persondtd.dtd约束            张三        23    
                                                  • 在xml文件内部引入

                                                                            ]>            张三        23    
                                                  • 引入网络dtd

                                                                张三        23    
                                                    Schema 约束
                                                    • schema 和 dtd 的区别

                                                      1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
                                                      2. 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
                                                      3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
                                                      4. schema 语法更加的复杂
                                                      • 编写schema约束
                                                        1. 创建一个文件,这个文件的后缀名为.xsd2. 定义文档声明3. schema文件的根标签为: 4. 在中定义属性:        xmlns=http://www.w3.org/2001/XMLSchema        5. 在中定义属性:        targetNamespace = 唯一的url地址,指定当前这个schema文件的名称空间            理解: 起个名, 顺带打广告6. 在中定义属性:elementFormDefault="qualified“,表示当前schema文件是一个质量良好的文件7. 通过element定义元素8. 判断当前元素是简单元素还是复杂元素
                                                        引入 :
                                                                    张三        23    

                                                        XML解析

                                                        • 解析的两种方式
                                                          • SAX 解析
                                                          • DOM 解析
                                                            准备动作
                                                            1. 导入 dom4j-1.6.1.jar 包
                                                            2. 获取 Document 对象
                                                            SAXReader reader = new SAXReader();Document document = reader.read(new File("day15-code\src\xml\stus.xml"));System.out.println(document);
                                                            方法介绍
                                                            示例代码
                                                            package com.itheima.start;import com.itheima.domain.Student;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.util.ArrayList;import java.util.List;public class Test {    public static void main(String[] args) throws DocumentException, FileNotFoundException {        SAXReader reader = new SAXReader();        Document document = reader.read(new File("mC\src\xml\stus.xml"));        ArrayList list = new ArrayList();        // 1. 获取根标签        Element rootElement = document.getRootElement();        // 2. 获取根标签下的所有子标签        List student = rootElement.elements("student");        // 3. 遍历集合        for (Element element : student) {            // 4. 获取标签属性            String id = element.attributeValue("id");            // 5. 获取name标签的值            String name = element.element("name").getText();            // 6. 获取age标签的值            String age = element.element("age").getText();            // 7. 封装为Student学生对象            Student stu = new Student(name, Integer.parseInt(age));            // 8. 添加到集合            list.add(stu);        }        list.forEach(s -> System.out.println(s));    }}

                                                            7. 注解

                                                            介绍 :

                                                            Annotation表示注解,是JDK1.5的新特性。

                                                            注解的主要作用:对我们的程序进行标注。

                                                            理解:注释是给人看的,注解是给虚拟机看的

                                                            通过注解可以给类增加额外的信息。

                                                            注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。

                                                            JDK中常见的注解 :
                                                            • @Override:表示方法的重写

                                                            • @Deprecated:表示修饰的方法已过时

                                                            • @SuppressWarnings(“all”):压制警告

                                                              除此之外,还需要掌握第三方框架中提供的注解:

                                                              比如:Junit

                                                              @Test 表示运行测试方法

                                                              @Before 表示在Test之前运行,进行初始化

                                                              @After 表示在Test之后运行,进行收尾

                                                              自定义注解 ( 了解 )
                                                              • 自定义注解单独存在没有意义的,一般会跟反射结合起来使用。

                                                              • 格式 :

                                                                public @interface 注解名称 {public 属性类型 属性名 () default 默认值 ;}public @interface Anno {    String show() default "show..." ;}

                                                                属性类型 :

                                                                • 基本数据类型
                                                                • String
                                                                • Class
                                                                • 注解
                                                                • 枚举
                                                                • 以上类型的一维数组
                                                                  public @interface MyAnno {    public static final int num1 = 100;    public static final String num2 = "abc";    public static final MyAnno num3 = null;    public static final Class num4 = String.class;    public static final int[] num5 = {};    public abstract String show1() default "show1";    public abstract int show2() default 132;    public abstract MyAnno2 show3() default @MyAnno2;    public abstract Class show4() default String.class;    public abstract int[] show5() default {1, 2, 3};}
                                                                  public @interface MyAnno {    int num1 = 100;    String num2 = "abc";    MyAnno num3 = null;    Class num4 = String.class;    int[] num5 = {};    String show1() default "123";    int show2() default 132;    MyAnno2 show3() default @MyAnno2;    Class show4() default String.class;    int[] show5() default {1, 2, 3};}
                                                                  注解的使用 : (掌握)
                                                                  • 类
                                                                  • 方法

                                                                    成员变量 : 很少这么做

                                                                    在使用注解时, 如果注解的属性没有给出默认值, 需要手动给出@Anno(name="张三")
                                                                    • 如果数组中只有一个属性值 , 在使用时{}是可以省略的
                                                                      特殊的属性 (掌握)

                                                                      定义注解中如果有多个属性没有赋值 , 使用时需要全部赋值

                                                                      定义注解中如果只有一个属性名字为value没有赋值 , 使用时直接给出值 , 不需要写属性名

                                                                      @Anno(“给value赋值”);

                                                                      案例
                                                                      • 需求

                                                                        自定义一个注解@Test,用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法

                                                                      • 实现步骤

                                                                        1. 自定义一个注解Test,并在类中的某几个方法上加上注解
                                                                        2. 在测试类中,获取注解所在的类的Class对象
                                                                        3. 获取类中所有的方法对象
                                                                        4. 遍历每一个方法对象,判断是否有对应的注解
                                                                        //表示Test这个注解的存活时间@Retention(value = RetentionPolicy.RUNTIME)public @interface Test {}public class UseTest {    //没有使用Test注解    public void show(){        System.out.println("UseTest....show....");    }    //使用Test注解    @Test    public void method(){        System.out.println("UseTest....method....");    }    //使用Test注解    @Test    public void function(){        System.out.println("UseTest....function....");    }}public class AnnoDemo {    public static void main(String[] args) throws tException {        // 1.通过反射获取UseTest类的字节码文件对象        Class clazz = Class.forName("com.itheima.myanno3.UseTest");        // 创建对象        UseTest useTest = (UseTest) clazz.newInstance();        // 2.通过反射获取这个类里面所有的方法对象        Method[] methods = clazz.getMethods();        // 3.遍历数组,得到每一个方法对象        for (Method method : methods) {            // method依次表示每一个方法对象。            // isAnnotationPresent(Class

上一篇:探索任务管理源码奥秘,高效管理,轻松驾驭!

下一篇:Win10 OEM密钥大揭秘,一键获取专业版激活密钥!