Spring Boot 单元测试
本文主要介绍Spring Boot应用程序Controller,Service 和 Repository层单元测试的写法。
1. Controller
Spring Boot提供了@WebMvcTest声明来加载只包括了需要测试web controller的bean的应用上下文,通过参数指定要测试和加载的具体controller类。
@MockBean: 使用此注解注入的类,表明类中的所有方法都使用自定义返回的值,这样在测试的时候就不会真的去调用远程接口,而是返回一个我们预设的值。
代码示例:
@WebMvcTest(value = StudentController.class)
class StudentControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private StudentService studentService;
@MockBean
private CourseRepository courseRepository;
@Test
void findAllCourse() {
}
@Test
void findAllStudent() throws Exception{
Mockito.when(studentService.findAllStudent()).thenReturn(new ArrayList<>());
RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/findAllStudent");
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
}
}
2. Service
注意Mock的初始化:MockitoAnnotations.initMocks
代码示例:
@RunWith(MockitoJUnitRunner.class)
class StudentServiceTest {
@Mock
private StudentRepository studentRepository;
@InjectMocks
private StudentService studentService;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
}
@Test
void findAllStudent() {
Mockito.when(studentRepository.findAll()).thenReturn(new ArrayList<>());
studentService.findAllStudent();
}
}
@Mock与@MockBean的区别
-
Mock一般用在不依赖框架的单元测试
-
MockBean用在依赖Spring上下文环境
3. Repository
@DataJpaTest: 默认使用内存数据库H2,且case具有事务性,当testcase运行结束时,会自动回滚插入数据
代码示例:
@DataJpaTest
class StudentRepositoryTest {
@Autowired
private StudentRepository studentRepository;
private Student student;
@BeforeEach
void setUp() {
student = new Student();
student.setId("stu0001");
student.setName("Aaron");
student.setDescription("Aaron Qin");
}
@Test
public void saveStudent(){
Student savedStudent = studentRepository.save(student);
}
@AfterEach
void tearDown() {
}
}
学习,总结,沉淀,提高。

浙公网安备 33010602011771号