Java单元测试和设计模式

发布于:2025-08-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

单元测试

.

测试分类

什么是测试?

测试的目的是尽可能多的发现软件中存在的BUG,而不是为了隐藏BUG。事实上测试有很多种类,比如:边界测试,压力测试,性能测试等

黑盒测试

黑盒测试也叫功能测试,主要关注软件每个功能是否实现,并不关注软件代码是否有错误;测试人员完全不考虑程序内部的逻辑结构和内部特性;任何人都可以做,把程序交给测试人员,到处随便点,看程序是否出错

白盒测试

白盒测试与黑盒测试相反,白盒测试主要检查软件内部逻辑结构、设计等是否符合规定;该测试人员要看懂别人写的代码,看懂之后,自己写一份代码测试别人写的代码

灰盒测试

灰盒测试是介于黑盒和白盒之间的一种测试,既关注功能也关注内部逻辑的实现,但并没有白盒测试那么细致;需要灰盒测试的目的是因为白盒测试效率较低

单元测试

(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确;比如一个方法是否正确,比如是否达到想要的效果等;这也是我们开发者最常用的一种方式;就程序员做自测用的

单元测试语法结构

public class Junit4Test {
   
   
    @Test
    public void xxxTest(){
   
   

    }
}

该测试语法注意事项

  1. 访问权限修饰符必须是public修饰
  2. 返回值类型必须是void
  3. 方法形参列表必须为空
  4. 一个类中可以有多个@Test方法,可单独或全部运行

单元测试常见的注解

A、@Before:它在执行@Test对应的方法之前执行

B、@Test:执行目标方法

C、@After:它在执行@Test对应的方法之后执行

public class Junit4Test {
   
   
	//一般用于关闭资源
    @After
    public void xxxAfter(){
   
   
        System.out.println("After");
    }
    @Test
    public void xxxTest(){
   
   
    	//实际开发中:初始化+核心代码+关闭资源,都可以放这里面
        System.out.println("Test");
    }
    //一般用于初始化
    @Before
    public void xxxBefore(){
   
   
        System.out.println("Before");
    }
    **
     * 执行优先顺序结果:
     * Before
     * Test
     * After
     */
}

单元测试的作用

一个类里面可以当多个main方法用,让程序更加健壮安全

自定义工具类

如何写自定义工具类?对比Arrays和Collections工具类的共性,可以看出相对规则:

①、不能让外部类实例化工具类【无构造方法,也就是private修饰的构造方法】

②、该类中的方法都是静态的【用static修饰的方法】

模拟实例——自定义工具类

/**
 * 自定义工具类
 * 		满足上面的相对规则条件
 */
public class CustomUtilityClass {
   
   
    //私有构造
    private CustomUtilityClass(){
   
   }
    //判断该字符串是否为空并且长度为0,true为空,false不为空
    public static Boolean isNull(String str){
   
   
        if (str == null || ("".equals(str.trim()) && str.length() == 0)){
   
   
            return true;
        }
        return false;
    }
}

使用自定义的工具类

public class Junit4Test {
   
   
    @Test
    public void xxxTest(){
   
   
        Boolean xX = CustomUtilityClass.isNull(" ");//这里长度不为0,所以false
        System.out.println(xX);//false
    }
}

自定义生成jar包——导入/导出

简单理解jar包就是字节码的集合包【装的全是.class】

生成jar包,导出:

第一步:Project Structure->Artifacts->Add(+号)->JAR->From modules with depen…

在这里插入图片描述
在这里插入图片描述

From modules with depen…是自定义或全部项目

第二步:Main Class,其它不用改动

在这里插入图片描述
在这里插入图片描述
一般把项目名下存放jar包文件存放的文件夹名字用lib

第三步:Build->Build Artifacts

在这里插入图片描述
在这里插入图片描述

导入,使用生成的jar包:

在这里插入图片描述

在这里插入图片描述
点击"Add as Library…" 产生关联之后,jar是能打开的,如果没有关联是打不开的

在这里插入图片描述
因为这里是同一个项目,打成jar包之后,这里把CustomUtilityClass类删了,然后直接在测试类中,CustomUtilityClass点方法,直接就可以用

在这里插入图片描述

PS:点击"Add as Library…" 产生关联之后,删除关联

在这里插入图片描述

PS:打jar错了,这里直接删除,再手动删除打jar生成的位置

在这里插入图片描述
在这里插入图片描述

设计模式

最主要的设计模式——单例模式【三种创建方式】

单:一个

例:实例

模式:一种结构

单例模式:请设计一种结构只能创建一个对象,创建对象的个数必须有且仅有一个

单例模式之——饿汉模式【优势:会主动创建对象,因为static修饰的,类加载时会被执行】

A、私有化构造方法【才能防止外部类随意new对象】

B、提供一个对象,该对象被private static final 修饰,确保唯一

C、提供一个公共静态的方法,用于返回对象 【静态区域只能访问静态成员】

PS:跟Runtime类如出一辙

在这里插入图片描述

模仿——单例模式之饿汉模式

/**
 * 单例模式——饿汉模式
 */
public class HungryManMode {
   
   
    //第二步:私有构造之后,外部类一个对象也创建不了,就需要当前类创建对象
    private static final HungryManMode hungry = new HungryManMode

网站公告

今日签到

点亮在社区的每一天
去签到