当前位置 : 首页 » 文章分类 :  开发  »  JUnit

JUnit

JUnit 笔记


Assert Exception 断言异常

JUnit5 Jupiter 断言异常

JUnit 5 Jupiter 提供了一个 assertThrows() 来断言异常

public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable) {
    return AssertThrows.assertThrows(expectedType, executable);
}

当期望的异常被抛出时,assertThrows()返回该异常,之后我们可以继续断言异常的message等信息。
例如

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    Exception e = Assertions.assertThrows(IllegalArgumentException.class, () -> service.delete(idsArg));
    log.info(e.getMessage());
    Assertions.assertTrue(e.getMessage().contains("无法删除ids"));
}

注意只有 expectedType 或其子类被抛出时断言才满足。假如抛出的不是期望的异常,assertThrows() 本身就会抛出异常,例如
期望 NumberFormatException 异常,其实闭包方法抛出的是 IllegalArgumentException 异常

org.opentest4j.AssertionFailedError: Unexpected exception type thrown ==> expected: <java.lang.NumberFormatException> but was: <java.lang.IllegalArgumentException>

JUnit4断言异常

直接在 @Test 注解内增加 expected 参数指定期望的异常,当期望的异常或其子类异常被抛出时单测成功,期望的异常未抛出时单测失败。

@Test(expected = NullPointerException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
    String test = null;
    test.length();
}

Assert an Exception is Thrown in JUnit 4 and 5
https://www.baeldung.com/junit-assert-exception


Spring Boot Junit无法执行问题汇总

测试方法必须是 public 的,private 测试方法无法执行
在测试方法上要有 @Test 注解
测试方法不能用 static 静态修饰
测试方法不能有返回值,带返回值的测试方法无法执行
测试方法不能有参数


@FixMethodOrder 指定方法执行顺序

默认情况下,JUnit 单测类中各个 @Test 单测方法的执行顺序是 确定但不可预测的(deterministic but not predictable)

从 junit 4.11 开始, Junit提供一个 @FixMethodOrder 注解(annotation)来控制测试方法的执行顺序。

@FixMethodOrder 注解的参数可选值有下面3个:
MethodSorters.JVM 按照JVM得到的方法顺序,并不一定是方法在代码中定义的顺序,这与JVM的实现有关
MethodSorters.DEFAULT(默认的顺序) 以确定但不可预期的顺序执行
MethodSorters.NAME_ASCENDING 按方法名字母顺序执行

注意:在junit5中这个注解又被删除了
https://github.com/junit-team/junit5/issues/13


JUnit5

JUnit 5 User Guide
https://junit.org/junit5/docs/current/user-guide/

官方提供的 Example Projects
junit-team / junit5-samples
https://github.com/junit-team/junit5-samples/tree/r5.6.1/junit5-jupiter-starter-maven


普通Java项目改为Maven项目并使用JUnit5

项目上点右键 -> Add Framework Support -> 勾选 Maven,则会自动添加一个 pom.xml 配置,之后就可以使用 mavne 引入需要的依赖了。
maven 默认使用 src/main/java 和 src/test/java 作为源码目录(Source Folders),如果不想使用默认的源码目录,可以自己在 Project 中配置
进入 File -> Project Structure -> Modules

默认是如下图这样的

默认Maven项目的源码目录

比如我的 algorithms 项目,只是独立的算法题代码,转为 maven 项目只是为了方便引入 junit 测试框架,就直接把根目录 . 设为 Test Source Folders ,方便直接使用 junit,改为下图这样


上一篇 LeetCode.289.Game of Life 生命游戏

下一篇 LeetCode.1111.Maximum Nesting Depth of Two Valid Parentheses Strings 有效括号的嵌套深度

阅读
评论
747
阅读预计3分钟
创建日期 2020-04-02
修改日期 2021-04-02
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论