读书笔记 -- Junit 实战(3rd)Ch03 Junit 的体系机构
3.1 体系结构
软件体系结构:软件系统的基本结构。包括 软件元素、元素之间的关系、元素和关系的属性。
3.2 JUnit4 的体系结构
1. JUnit4 运行器:一个扩展了 Runner 抽象类的类,负责运行 JUnit 测试。JUnit4 的所有功能都在一个 JAR 文件中,但可以通过反射来扩展。
实践中,可以用现有的运行器,如 Spring 框架的运行器,或 Mockito 模拟对象的运行器。
JUnit4 添加自定义功能的方法:扩展 JUnit4 的抽象类 Runner,覆盖其方法并使用反射。
// 关于反射的一个说明:
在Java中,Method.invoke()方法是Java反射API的一部分。这个方法用于调用一个对象的方法。这是一个非常强大的工具,因为它可以在运行时动态地调用类的方法,即使这个类是在编译时未知的。 Method.invoke()方法的基本形式如下: public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
其中: obj:要调用方法的对象。如果方法是一个静态方法,则此对象可以为null。 args:传递给方法的参数列表。如果方法没有参数,则此数组可以为空。 Method.invoke()方法返回一个对象,这是调用方法的返回值。如果方法没有返回值(即其返回类型为void),则此方法返回null。 这是一个例子: import java.lang.reflect.*; public class Test { public static void main(String[] args) { try { // 获取一个对象,该对象是"Hello World"类的实例 Object obj = new String("Hello World"); // 获取String类的println方法 Method method = String.class.getMethod("println"); // 调用println方法 method.invoke(obj); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } 在这个例子中,我们创建了一个String对象,并使用反射调用了它的println方法。注意,尽管这个方法在String类中并没有明确定义,但是我们仍然可以调用它,因为它是Object类的一部分。这就是反射的强大之处——它可以让我们在运行时动态地调用任何类的方法,
无论这个类在编译时是否已知。
2. JUnit4 规则:拦截测试方法调用的组件,允许你在测试方法运行前做些事情,测试方法后做些事情(JUnit4 特有)。要添加行为,需要在 TestRule 字段上用 @Rule 注解。
3.3 JUnit5 的体系结构
JUnit Platform:Junit 在 JVM 中启动测试框架的基础。此模块还提供了从控制台、IDE或构建工具启动测试的 API。
Junit Jupiter:结合了新的编程模型(注解、类和方法)和扩展模型,在 Junit 5 中用于编写测试和扩展。
Junit Vintage:用于兼容运行 Junit 3 和 Junit 4 的测试。
合集:
Junit 实战
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)