How to use spring boot test to test controller and services
1. Overview
Unit Testing is very import in program,In this tutorial, I will writing tests using the framework in Spring Boot. I’ll cover unit tests that can run in isolation as well as integration tests that will bootstrap Spring context before executing tests by spring-boot-starter-web.
2. Project Set Up
The application we're going to use in this example is a restful api on user resource. include controller, service and mapper.
3. Maven Dependencies
xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
4. Code
controller
java
@RestController
@Slf4j
@RequestMapping("user")
public class TestController {
@Value("${env.name}")
private String env;
private final TUserService userService;
public TestController(TUserService userService) {
this.userService = userService;
}
@GetMapping("{id}")
private TUser getById(@PathVariable String id) {
log.info("current env {}",env);
return userService.getById(id);
}
}
service
java
public interface TUserService extends IService<TUser> {
}
java
@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser>
implements TUserService{
}
Mapper
java
public interface TUserMapper extends BaseMapper<TUser> {
}
domain
java
@TableName(value = "t_user")
@Data
public class TUser {
private Long id;
@TableField(value = "t_username")
private String username;
@TableField(value = "t_password")
private String password;
@TableField(value = "t_phone")
private String phone;
@TableField(value = "t_address")
private String address;
}
5. Test
- base class
java
@SpringBootTest
@ActiveProfiles(value = "test")
public class TestApplication {
}
ControllerTest
java
@AutoConfigureMockMvc
public class UserControllerTest extends TestApplication {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetUserById() throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/user/1");
MvcResult mvcResult = mockMvc.perform(builder)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value(1))
.andReturn();
}
}
ServiceTest
java
public class UserServiceTest extends TestApplication {
@Autowired
private TUserService userService;
@Test
public void test() {
TUser user = userService.getById(1);
Assertions.assertEquals(user.getUsername(),"lcd");
}
}
6. Conclusion
In this article, we took a deep dive into the testing support in Spring Boot and showed how to write unit tests efficiently.