关键字
@RepeatedTest :表示方法可重复执行,下方会有详细介绍
@DisplayName :为测试类或者测试方法设置展示名称
@BeforeEach :表示在每个单元测试之前执行
@AfterEach :表示在每个单元测试之后执行
@BeforeAll :表示在所有单元测试之前执行
@AfterAll :表示在所有单元测试之后执行
@Tag :表示单元测试类别,类似于JUnit4中的@Categories
@Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
@Timeout :表示测试方法运行如果超过了指定时间将会返回错误
@ExtendWith :为测试类或测试方法提供扩展类引用
@ParameterizedTest:为测试用例提供参数化的支持
@ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型
@ParameterizedTest
@ValueSource(strings = {"one", "two", "three"})
@DisplayName("参数化测试1")
public void parameterizedTest1(String string) {
System.out.println(string);
Assertions.assertTrue(StringUtils.isNotBlank(string));
}
@FileSource用于从外部Json或Yaml文件中读取入参。单元测试代码的逻辑会非常清晰
@DisplayName("创建咨询来源:成功创建")
@ParameterizedTest
@FileSource(resources = "testData/consultconfig_app_service.yaml")
public void testSaveConsultSource_SUCCESS(ConsultConfigAppServiceDTO dto) {
//获取入参
ConsultSourceSaveDTO saveDTO = dto.getSaveConsultSourceSuccess();
//调用测试方法
ConsultSourceBO consultSourceBO = consultConfigAppService.saveConsultSource(saveDTO);
//验证
Assertions.assertEquals("testConsultSourceCmd", consultSourceBO.getConsultChannelName());
}
@RepeatedTest注解,允许某个单元测试执行多次。其实现在我也并不是很理解为什么要将一个单元测试运行多遍。目前我个人理解是因为单元测试是需要有可重复执行性的,而多次运行单元测试可以更加保证测试的准确性,防止一些随机性。
@RepeatedTest(10) //表示重复执行10次
@DisplayName("重复测试")
public void testRepeated() {
Assertions.assertTrue(1 == 1);
}
自动化框架搭建:
自动化测试懂
常见的断言的使用:
AssertEquals(判断预期值是否与实际的值相等)
AssertAll(分组断言,执行其中包含的所有断言):
public void shouldTellIfPrime(){
Assertions.assertAll(
() -> assertTrue(isPrime(2)),
() -> assertFalse(isPrime(4))
);
}
AssertArrayEquals(判断数组与预期数组是否一致)
AssertFalse(判断条件为假)
AssertNotNull(判断结果不为null)
AssertSame(判断两个对象相等)
AssertTimeOut(判断超时)