Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • JUnit单元测试
    • 1. JUnit 单元测试
      • 测试分类
      • JUnit 使用(白盒测试)
      • 步骤
      • 判定结果
      • 补充注解
    • 2. 反射:框架设计的灵魂
      • 什么是反射?
      • 反射的优点
      • 获取 Class 对象的方式
      • Class 类的常用方法
      • 1. 获取成员变量(Field)
      • 2. 获取构造方法(Constructor)
      • 3. 获取成员方法(Method)
      • 4. 获取类名
      • Field 类操作
      • Constructor 类操作
      • Method 类操作
      • 案例:简单“框架”实现
      • 实现步骤
    • 3. 注解(Annotation)
      • 注解 vs 注释
      • 注解概念
      • 注解的作用分类
      • 常见的 JDK 注解
      • 自定义注解
      • 定义格式
      • 属性类型
      • 使用规则
      • 元注解(描述注解的注解)
      • 注解解析过程
      • 注解案例:模拟简单测试框架
  • JDBC
  • JDBC连接池&JDBCTemplate
  • XML
  • Tomcat&Servlet
  • Servlet&HTTP&Request
  • Response
  • Cookie&Session
  • EL&JSTL
  • Filter&Listener
  • 《JavaWeb》笔记
Salmon
2025-07-21
目录

JUnit单元测试

# 1. JUnit 单元测试

# 测试分类

  • 黑盒测试:不需要写代码,只关注输入和期望输出。
  • 白盒测试:需要写代码,关注程序内部执行流程。

# JUnit 使用(白盒测试)

# 步骤

  1. 定义一个测试类(建议命名为 被测试类名Test,如 CalculatorTest)

    包结构建议放在 xxx.xxx.xxx.test 下,如:cn.itcast.test

  2. 定义测试方法:

    • 方法名:testXXX() 形式
    • 返回值:void
    • 参数列表:空参
  3. 使用 @Test 注解标记测试方法

  4. 导入 JUnit 依赖环境

# 判定结果

  • 红色:测试失败
  • 绿色:测试成功
  • 使用断言进行结果判断:
Assert.assertEquals(期望结果, 实际结果);

# 补充注解

  • @Before:测试方法前执行
  • @After:测试方法后执行

# 2. 反射:框架设计的灵魂

# 什么是反射?

将类的各个组成部分封装为对象的机制

# 反射的优点

  1. 程序运行时动态操作对象
  2. 解耦,提高扩展性

# 获取 Class 对象的方式

1. Class.forName("全类名")        // 常用于配置文件加载类
2. 类名.class                     // 常用于参数传递
3. 对象.getClass()               // 通过对象获取类

✅ 同一个类在一次程序运行中只会加载一次,Class 对象是唯一的。

# Class 类的常用方法

# 1. 获取成员变量(Field)

Field[] getFields()
Field getField(String name)
Field[] getDeclaredFields()
Field getDeclaredField(String name)

# 2. 获取构造方法(Constructor)

Constructor<?>[] getConstructors()
Constructor<T> getConstructor(参数类型...)
Constructor<T> getDeclaredConstructor(参数类型...)
Constructor<?>[] getDeclaredConstructors()

# 3. 获取成员方法(Method)

Method[] getMethods()
Method getMethod(String name, 参数类型...)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name, 参数类型...)

# 4. 获取类名

String getName()

# Field 类操作

field.set(Object obj, Object value);   // 设置值
field.get(Object obj);                 // 获取值
field.setAccessible(true);            // 忽略访问权限(暴力反射)

# Constructor 类操作

Constructor.newInstance(Object... args);   // 创建对象
clazz.newInstance();                       // 简化空参构造创建

# Method 类操作

method.invoke(Object obj, Object... args); // 执行方法
method.getName();                          // 获取方法名

# 案例:简单“框架”实现

目标:不改动类代码,通过配置和反射创建对象、执行方法

# 实现步骤

  1. 配置文件:定义类名、方法名
  2. 程序读取配置文件
  3. 反射加载类
  4. 创建对象
  5. 执行方法

# 3. 注解(Annotation)

# 注解 vs 注释

  • 注解:给计算机看的(说明程序)
  • 注释:给程序员看的(描述程序)

# 注解概念

  • JDK 1.5+ 新特性
  • 可用于:类、方法、字段、参数、局部变量等前面
  • 使用方式:@注解名

# 注解的作用分类

  1. 编写文档:配合 Javadoc
  2. 代码分析:配合反射
  3. 编译检查:如 @Override

# 常见的 JDK 注解

  • @Override:方法必须来自父类/接口
  • @Deprecated:标识方法过时
  • @SuppressWarnings("all"):压制所有警告

# 自定义注解

# 定义格式

// 元注解 + 自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "default";
    int number();
}

# 属性类型

  • 基本类型、String、枚举、注解、以上类型的数组

# 使用规则

  • 如果属性名是 value,可以省略名字直接写值
  • 数组赋值时用 {} 包裹,只有一个元素可省略

# 元注解(描述注解的注解)

元注解 说明
@Target 注解作用位置(类、方法、字段)
@Retention 注解生命周期(SOURCE / CLASS / RUNTIME)
@Documented 是否包含在 Javadoc 中
@Inherited 是否被子类继承

# 注解解析过程

  1. 获取对象:Class、Method、Field
  2. 使用 getAnnotation(Class) 获取注解
  3. 调用注解中的方法,获取值

# 注解案例:模拟简单测试框架

通过注解标识要执行的方法,在运行时用反射动态调用。

上次更新: 2025/07/23, 01:37:33
JDBC

JDBC→

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式