JUnit4/JUnit5 注解
Created|Updated
|Word Count:99|Reading Time:1mins|Post Views:
junit4 | junit5 | 特点 |
---|---|---|
@BeforeClass | @BeforeAll | 在当前类的所有测试方法之前执行。注解在【静态方法】上。 |
@AfterClass | @AfterAll | 在当前类中的所有测试方法之后执行。注解在【静态方法】上。 |
@Before | @BeforeEach | 在每个测试方法之前执行。注解在【非静态方法】上。 |
@After | @AfterEach | 在每个测试方法之后执行。注解在【非静态方法】上。 |
Author: magicliang
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles
2021-12-27
Surefire、Failsafe、Jacoco 与 Maven 插件
Apache Maven SurefireApache Maven Surefire 本身是一个测试框架。 Maven Surefire Plugin 和 Maven Failsafe Plugin 都是这个项目的模块。 Surefire 插件Surefire 是在 maven 的构建生命周期里面,test phase 执行单元测试的插件。Surefire 的意思是“完全,一定成功的”。任何单元测试失败,都会导致构建失败。Surefire 跑测试失败,会在现场留下名如hs_err*的文件。 用法这个插件只有一个 goal,就是 test。 因此,使用它都不需要配置什么 configuration 和 phase。1234567<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> ...
2017-10-23
昂贵的异常
抛出问题 Joshua Bloch 在《Effective Java》的 Item 57 里明确地提到过,不要试图用 Exception 的跳转来代替正常的程序控制流。他列举了很多原因,但特别提到了抛出异常会使得整个程序运行变慢。抛出异常远比普通的 return , break 等操作对控制流、数据流的性能影响要大,它就只适合拿来作异常分支的控制语句,而不能拿来编写正常的逻辑。 Throwing exception is expensive. 这句话在 Java 的程序员世界里面已经成为老生常谈。却很少有人谈及,但到底抛出异常比正常的程序跳转返回慢在哪里,有多慢。“不要滥用异常”好像一个猴子定律,人们忘记了为什么不能这么做,却不明白为什么不能这么做。 这几天读了一位同事写的好文[《Java虚拟机是如何处理异常的》][2],深入地分析了 JVM 对异常跳转的处理过程: JVM...
2017-11-10
线程安全与锁优化
线程安全什么是线程安全“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。” 相对的线程安全,可以分成五个等级: 线程安全的分类不可变不可变的数据,都是线程安全的。不可变的对象引用,加上所有field都是不可变的。如果有得选,尽量连方法都是final的。 绝对线程安全Vector不是线程安全的。它也会出现并发修改时 Out of Range 的异常(注意,不是 ConcurrentModification 的异常)。 相对线程安全需要保证对这个对象的单独操作是线程安全的,在调用的时候不需要加上额外的保障措施。对于特定顺序的连续操作,就需要额外的同步来保证调用的正确性了。 线程兼容可以通过特殊手段做到线程安全的普通类,绝大部分类都属于相对线程安全的。 线程对立线程对立,是不管调用端是否采取了同步措施,都无法在多线程环境中使用的代码。常见的线程对立的操作还有 suspend(),resume(),...
2017-11-30
Java中的幽灵类型
先上结论:幽灵类型(Phantom Type)是一种可以把有些运行时才能检测到的错误,在编译时检测出来的技巧。按照有些老外的观点,就是“Making Wrong Code Look Wrong”。在面向对象的编程语言之中,幽灵类型的实现,往往与状态模式较为接近,但比状态模式提供了更强的纠错功能。在Java 5 以后的版本里,程序员可以使用泛型。通过泛型的类型参数,Java 中也拥有了幽灵类型的能力。 上面的阐述是不是很难看懂?我也觉得拗口,让我们直接进入具体的例子。假设我们要写一个飞机控制程序,操作飞机起飞或者落地。这个程序有一个非常强的业务约束,就是必须保证飞机一开始必须出现在的地上,只有在地上的飞机可以起飞,只有起飞的飞机可以落地,那么我们应该怎样设计我们的程序(主要是类型关系),来保证这个约束必然成立呢? 让我们先来定义一组状态接口: 123456789101112131415161718192021/** * FlightStatus.java * @author liangchuan...
2018-01-04
不常见的 Java 集合类的用法
Sorted 集合##Sorted集合 Navigable 集合Navigable Priority集合Priority Identity 集合##Identity SkipList 集合跳表系列。 DelayQueue延迟队列
2018-05-29
JPA 的 id 生成策略
JPA 有一个@GeneratedValue注解,有一个strategy attribute,如@GeneratedValue(strategy = GenerationType.IDENTITY)。 常见的可选策略主要有IDENTITY和SEQUENCE。 GenerationType.IDENTITY要求底层有一个 integer 或者 bigint 类型的自增列( auto-incremented column)。自增列的赋值必须在插入操作之后发生,因为这个原因,Hibernate 无法进行各种优化(特别是 JDBC 的 batch 处理,一次 flush 操作会产生很多条insert 语句,分别执行)。如果事务回滚,自增列的值就会被丢弃。数据库在这个自增操作上有个高度优化的轻量级锁机制,性能非常棒。 MySQL 支持这种 id 生成策略, 使用 MySQL 应该尽量使用这个策略,即使它无法优化。 JPA 用它生成 id,会一条一条地插入新的 entity。 GenerationType.SEQUENCE数据库有一个所谓的 sequence 对象,可以通过 select...
Announcement
人生只是,守株待兔
Recent Posts