JUnit单元测试
JUnit单元测试
CAMELLIAJUnit单元测试
1、单元测试类
单元测试类名:XxxTest
2、单元测试方法
- 单元测试方法需要用
@Test
注解标注。 - 单元测试方法返回类型必须是
void
。 - 单元测试方法形参个数为0.
- 单元测试方法名约定规范为:testXxx。
- 在JUnit5中,方法名可以不用声明为public。
3、期望值、实际值
期望值(Expected Value):
期望值是指在执行单元测试时,开发者预期被测试代码会产生的结果。
在编写单元测试时,通常会先确定要测试的功能或情况,并明确预期的输出、状态或行为。
期望值可以是一个具体的数值、对象、状态等,取决于正在测试的功能。在测试方法中,开发者会使用断言方法来验证实际结果是否与期望值一致。
实际值(Actual Value):
实际值是指被测试代码在执行单元测试时产生的实际结果。
实际值是通过执行被测试的代码来获取的,它反映了代码在给定输入下的真实行为。
在单元测试方法中,开发者会调用被测试的方法或功能,并获取其输出、状态或行为,然后与期望值进行比较。
4、常见注解
@BeforeAll
、@AfterAll
、@BeforeEach
和 @AfterEach
是JUnit 5中用于执行测试前后操作的生命周期方法。它们提供了一种方便的方式来执行一些公共的初始化和清理工作,以确保测试的独立性和可重复性。
@BeforeAll:
@BeforeAll
注解用于指定在运行测试类中的所有测试方法之前执行的方法。- 该注解标记的方法必须是静态的,且必须返回
void
。 - 通常用于执行一次性的全局初始化工作,例如创建数据库连接、启动服务器等。
- 在一个测试类中,
@BeforeAll
注解标记的方法只会执行一次,并且在所有测试方法之前执行。1
2
3
4
public static void before(){
System.out.println("开始执行单元测试了!");
}
@AfterAll:
@AfterAll
注解用于指定在运行测试类中的所有测试方法之后执行的方法。- 该注解标记的方法必须是静态的,且必须返回
void
。 - 通常用于执行一次性的全局清理工作,例如关闭数据库连接、停止服务器等。
- 在一个测试类中,
@AfterAll
注解标记的方法只会执行一次,并且在所有测试方法之后执行。1
2
3
4
public static void after(){
System.out.println("单元测试执行完毕!");
}
@BeforeEach:
@BeforeEach
注解用于指定在运行每个测试方法之前执行的方法。- 该注解标记的方法不需要是静态的,但必须返回
void
。 - 通常用于执行每个测试方法之前的初始化工作,例如创建临时对象、设置测试数据等。
- 在一个测试类中,每个
@BeforeEach
注解标记的方法都会在对应的测试方法之前执行。1
2
3
4
public void beforeEach(){
System.out.println("单元测试方法开始执行");
}
@AfterEach:
@AfterEach
注解用于指定在运行每个测试方法之后执行的方法。- 该注解标记的方法不需要是静态的,但必须返回
void
。 - 通常用于执行每个测试方法之后的清理工作,例如释放资源、恢复状态等。
- 在一个测试类中,每个
@AfterEach
注解标记的方法都会在对应的测试方法之后执行。1
2
3
4
public void afterEach(){
System.out.println("单元测试方法执行结束");
}
5、单元测试断言
在单元测试中,断言是一种用于验证代码行为的机制。
它允许开发者在测试代码中声明预期结果,并与实际结果进行比较,从而验证代码是否按预期工作。
如果预期结果与实际结果相符,则断言通过,否则测试失败。
在JUnit中,常用的断言方法包括:
**assertEquals(expected, actual)**:断言两个对象是否相等。如果预期值(expected)等于实际值(actual),则断言通过。
**assertTrue(condition)**:断言给定的条件是否为真。如果条件为真,则断言通过。
**assertFalse(condition)**:断言给定的条件是否为假。如果条件为假,则断言通过。
**assertNull(object)**:断言给定的对象是否为null。如果对象为null,则断言通过。
**assertNotNull(object)**:断言给定的对象是否不为null。如果对象不为null,则断言通过。
**assertArrayEquals(expectedArray, actualArray)**:断言两个数组是否相等。如果预期数组(expectedArray)与实际数组(actualArray)相等,则断言通过。
**assertSame(expected, actual)**:断言两个对象引用是否指向同一个对象。如果预期对象(expected)和实际对象(actual)是同一个对象,则断言通过。
**assertNotSame(expected, actual)**:断言两个对象引用是否指向不同的对象。如果预期对象(expected)和实际对象(actual)不是同一个对象,则断言通过。
**assertThrows(expectedException, executable)**:断言给定的代码块是否抛出了预期的异常。如果代码块抛出了预期的异常,则断言通过。