JUnit5 测试用例断言
JUnit5 测试用例断言
JUnit5 断言
在 JUnit 5 中,断言用于验证测试的预期结果和实际结果是否一致。JUnit 5 提供了一组丰富的断言方法,用于测试不同类型的条件和值。
- 内置断言方法
- 第三方库断言
内置断言方法
- 必修
- assertEquals 用于断言预期值和实际值相等
- assertTrue 断言提供的条件为真
- 进阶
- assertAll 执行多条断言
- 选修
- assertNotNull 断言实际不为空
- assertTimeout 用于测试长时间运行的任务,如果测试任务花费的时间超过指定的持续时间,则测试将失败。
- assertThrows 断言函数执行会发生异常
assertEquals 实例
- 创建第一个测试类
AssertEqTest -
创建测试方法 断言方式使用
assertEquals,方法前记得添加Test注释package JUnit5assert; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class AssertEqTest { @Test void Hogwarts(){ System.out.println("断言测试"); //第一个参数为预期结果,第二个参数为实际结果 assertEquals(3,1+1); } }
- 已知 1+1!=1,断言应该是失败的,我们执行查看结果 - 断言失败 预期结果与实际结果不等 错误输出信息中可以看到断言所在的行数以及测试类和测试方法 还有具体的测试信息

- 将预期结果与实际结果改为一致,我们在查看执行结果 - 修改断言内容
- 执行查看结果
断言成功 无错误信息

assertTrue 实例
- 创建测试类
AssertTrueTest -
编写两个测试方法 断言方式使用
assertTrue方法前记得添加Test注释package JUnit5assert; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; public class AssertTrueTest { //对表达式进行断言 @Test void expressionDemo(){ System.out.println("断言表达式为True"); //括号内表达式正确则断言正确,反之则断言失败 assertTrue(3<1); } //对bool类型断言 @Test void boolDemo() { System.out.println("断言布尔类型"); //括号内是true则断言正确,反之则断言失败 assertTrue(true); } }
- 执行查看断言测试结果,
expressionDemo方法中断言 3<1 是错误的表达式,断言应失败,boolDemo方法中直接断言true,断言正确。
assertNotNull 实例
- 创建测试类
AssertNotNullTest -
创建两个测试方法 断言方式使用
assertNotNullpackage JUnit5assert; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; public class AssertNotNullTest { @Test void nullDemo(){ System.out.println("断言传值为空的场景"); assertNotNull(null); } @Test void notNullDemo(){ System.out.println("断言传值不为空的场景"); assertNotNull(1); } }
-
执行查看结果
nullDemo方法中 断言null而我们期望得到到不为空 不符合预期 断言失败notNullDemo方法中 断言 1 不为空 断言成功

assertAll 实例
用来判断一组断言是否成功,包含的所有断言都会执行,即使其中一个或多个断言失败,重点内容很重要!
- 创建
AssertAllDemoTest测试类 - 编写测试方法 使用
assertAll断言方式进行断言- 断言格式
assertAll("All",//描述信息 () -> assertEquals(2, 1 + 1),//使用assertEquals断言方式进行断言,也可使用其他方式 () -> assertEquals(4, 2 + 3) );
- 断言格式
-
执行查看结果
- 显示两组失败信息,分别对应方法中的两组预期值和实际值不相等的断言

- 结果中也会显示具体的断言错误信息

- 实现代码
package JUnit5assert; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; public class AssertAllDemoTest { @Test void Hogwarts(){ System.out.println("断言测试AssertAll场景"); //用来判断一组断言是否成功,包含的所有断言都会执行,即使其中一个或多个断言失败,且返回结果 assertAll("All",//第一个参数heading是描述信息 可表示测试针对的场景 () -> assertEquals(2, 1 + 1),//assertEquals中第一个参数为预期结果,第二个参数为实际结果 () -> assertEquals(4, 2 + 3), () -> assertEquals(1, 2 + 0) ); } } - 显示两组失败信息,分别对应方法中的两组预期值和实际值不相等的断言
assertTimeout 实例
用于测试长时间运行的任务,如果测试任务花费的时间超过指定的持续时间,则测试将失败。
- 创建测试类
AssertTimeoutDemoTest -
编写测试方法 使用
assertTimeout方式进行断言- 格式
assertTimeout(Duration.ofSeconds(3), ()->{ sleep(4000); });- assertTimeout 第二个参数中的操作执行时间超过第一个参数中的时间,则断言失败,超时抛出异常
package JUnit5assert; import org.junit.jupiter.api.Test; import java.time.Duration; import static java.lang.Thread.sleep; import static org.junit.jupiter.api.Assertions.assertTimeout; public class AssertTimeoutDemoTest { @Test void testAssertTimeout() { // 超时断言 //第一个参数为设置预期时间信息,Duration.ofSeconds(3)表示三秒超时 //第二个参数中传递需要执行的操作 //assertTimeout第二个参数中的操作执行时间超过第一个参数中的时间,则断言失败,超时抛出异常 assertTimeout(Duration.ofSeconds(3), ()->{ sleep(4000); }); } }
- 执行查看结果 assertTimeout 第二个参数中的操作执行时间超过第一个参数中的时间,断言失败,超时抛出异常

assertThrows 实例
多用与测试接口,简单了解即可,更多在研发时使用
- 创建
AssertThrowsDemoTest测试类 -
在测试类中定义一个函数,再编写一个测试函数,测试函数中使用 assertThrows 进行断言,第二个参数中执行的操作出现异常则断言成功,没有出现异常则断言失败。
package JUnit5assert; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; public class AssertThrowsDemoTest { void fn(int a, int b){ System.out.println(a / b); } @Test void firsttestAssertThrows() { // 异常断言 //fn函数执行时会产生异常,0不可作为除数,断言成功 assertThrows(ArithmeticException.class, () -> fn(1, 0)); } @Test void secondtestAssertThrows() { // 异常断言 //fn函数执行时没有异常,断言失败 assertThrows(ArithmeticException.class, () -> fn(1, 1)); } }
- 执行查看测试结果 -
firsttestAssertThrows中断言成功 -secondtestAssertThrows中断言失败
第三方库断言
简单了解即可
- Hamcrest
- AssertJ
- Truth
