赞
踩
class:org.junit.jupiter.api.Assertions
方法名 | 描述 |
---|---|
assertEquals | 断言结果值和预期结果是否相等 |
assertNotEquals | 断言结果值和预期结果是否不相等 |
assertNull | 断言结果值是否为空 |
assertNotNull | 断言结果值是否不为空 |
例如:Assertions.assertEquals(expected, actual);
方法名 | 描述 |
---|---|
assertSame | 断言是否是相同的对象 |
assertNotSame | 断言是否是不想等的对象 |
方法名 | 描述 |
---|---|
assertTrue | 断言是否是真 |
assertNotTrue | 断言是否是假 |
方法名 | 描述 |
---|---|
assertArraysEquals | 断言期望的数组和结果数组是否相等 |
方法名 | 描述 |
---|---|
assertThrows | 断言异常是否是所期望的 |
例如:
notFound异常:
NotFoundException exception = assertThrows(NotFoundException .class, () -> xxx.方法名());
注解 | 描述 |
---|---|
@BeforEach | 该注解下的方法,在每个测试执行前都会先执行 |
@AfterEach | 该注解下的方法,在每个测试执行后都会先执行 |
@BeforeAll | 该注解下的方法,在所有测试执行前会执行一次 |
@AfterAll | 该注解下的方法,在所有测试执行后会执行一次 |
执行顺序:
@BeforeAll ----->@BeforeEach----->@Test 方法一------>@AfterEach--------->@BeforeEach----->@Test 方法二------>@AfterEach------->@AfterAll
给测试添加运行时展示的名字
@Order 给方法加上排序的优先级
@TestMethodOrder
指定方法的顺序:
名字 | 描述 |
---|---|
MethodOrderer.DisplayName | 根据displayName的测试名字进行方法的排序 |
MethodOrderer.MethodName | 根据方法名进行方法的排序 |
MethodOrderer.Random | 根据方法名随机排序 |
MethodOrderer.OrderAnnotation | 根据@Order注解进行排序 |
名字 | 描述 |
---|---|
@Disabled | 该注解下的测试方法都不会被运行,会被忽略 |
@EnabledOnOs | 该注解下的测试只能运行在给定的操作系统下,非给定的操作系统下会被忽略运行 |
用参数化测试的时候要将@Test注解换成@ParameterizedTest,使用以下注解给方法注入自己想要的入参。
注解 | 描述 |
---|---|
@ValueSource | 数组:字符串数组,整数数组,double数组,float数组等 |
@CsvSource | csv字符串值数组 |
@CsvFileSource | 从文件中读取CSV值 |
@EnumSource | 枚举类型的值 |
@MethodSource | 提供值的自定义方法 |
(1)测试方法上添加
@EnumSource(value = xxx.class, names = {“A”, “B”} )
A和B是xxx.class类中的值,也是测试方法的入参
(2)在测试方法上添加@ParameterizedTest,而不是使用通常的@Test
(3)写测试方法,xxx为EnumSource中定义的类
void 方法名(xxx name){
}
(1)测试方法上添加
@CsvSource(“A,B” ) A和B是是测试方法的入参
(2)在测试方法上添加@ParameterizedTest,而不是使用通常的@Test
(3)写测试方法,name为CsvSource中定义的类
void 方法名(String name){
}
(1)测试方法上添加
@ValueSource(booleans = {true, false}) booleans 是入参的类型,其实还有strings chars等
(2)在测试方法上添加@ParameterizedTest,而不是使用通常的@Test
(3)写测试方法,name为ValueSource中定义的类
void 方法名(Boolean name){
}
(1)需要引入spring boot测试的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
(2)在测试中注入被测方法
@SpringBootTest
class UserServiceApplicationTests {
@InjectMocks
private UserServiceImpl service;
@Test
void contextLoads() {
}
}
(3)使用Mockito,设置测试替身
@SpringBootTest
class UserServiceApplicationTests {
@InjectMocks
private UserServiceImpl service;
@Mock
private UserRepositoryImpl repository;
@Test
void contextLoads() {
}
}
(4)设置测试替身希望能得到的结果
class UserServiceApplicationTests { @InjectMocks private UserServiceImpl service; @Mock private UserRepositoryImpl repository; @Test void contextLoads() { when(repository.findById(any())) .thenReturn(User.builder() .id("11") .name("qwx") .age(18) .build()); } }
(5) 调用被测方法,对比期望的值和被测方法返回的值是否相等
@SpringBootTest class UserServiceApplicationTests { @InjectMocks private UserServiceImpl service; @Mock private UserRepositoryImpl repository; @Test void contextLoads() { when(repository.findById(any())) .thenReturn(User.builder() .id("11") .name("qwx") .age(18) .build()); UserResponseDTO userResponseDTO = service.findUserById(any()); assertEquals("11", userResponseDTO.getId()); assertEquals("qwx", userResponseDTO.getName()); } }
调用私有方法:
// 假设有一个类名为MyClass,其中包含一个私有方法privateMethod()
Object obj = new MyClass();
ReflectionTestUtils.invokeMethod(obj, "privateMethod", arg1, arg2);
设置私有字段的值:
// 假设有一个类名为MyClass,其中包含一个私有字段privateField
Object obj = new MyClass();
ReflectionTestUtils.setField(obj, "privateField", value);
获取私有字段的值:
// 假设有一个类名为MyClass,其中包含一个私有字段privateField
Object obj = new MyClass();
Object fieldValue = ReflectionTestUtils.getField(obj, "privateField");
设置私有静态字段的值:
// 假设有一个类名为MyClass,其中包含一个私有静态字段privateStaticField
ReflectionTestUtils.setField(MyClass.class, "privateStaticField", value);
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。