首页 > 解决方案 > 如何将 JUnit 测试写入我的 Spring-MVC 控制器类?

问题描述

我想为我的UserController班级编写一个 JUnit 测试(Java 单元),但我不知道该怎么做。

用户控制器:

@RestController
@RequestMapping(CompositeController.ENTRY)
public class UserController {
protected final static String ENTRY = "/demo/v1/composite";
private UserService userService;

@Autowired
public UserController(UserService userService) {
    this.userService = userService;
}


 @GetMapping(path = "/isadmin")
 public ResponseEntity<Boolean> checkadmin(@RequestHeader String nickname){

 return userService.checkifadmin(nickname);

 }

用户服务:

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

@Service
public interface UserService {
ResponseEntity<Boolean> checkifadmin(String nickname);
}

用户服务实现:

public class UserServiceImpl implements UserService {

 private final String userBaseAdress = "http://localhost:7777";
 private final String userBasePath = "/demo/v1/user";

 public ResponseEntity<Boolean> checkifadmin(String nickname) {          
        HttpHeaders headers = new HttpHeaders();            
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("nickname", nickname);       
        HttpEntity<String> entity = new HttpEntity<String>(headers);             
        RestTemplate restTemplate = new RestTemplate();          
        ResponseEntity<Boolean> response = restTemplate.exchange(userBaseAdress + userBasePath + "/isadmin",
                HttpMethod.GET, entity, Boolean.class);         
        return response;
    }
}

标签: javaspring-mvcjunitjunit4

解决方案


您可以使用 Spring 的MockMvc. 查看详细信息:https ://spring.io/guides/gs/testing-web/

另一个有用的方法是根本不启动服务器,而只测试下面的层,Spring 处理传入的 HTTP 请求并将其交给您的控制器。这样,几乎使用了整个堆栈,并且您的代码将被调用,就好像它正在处理一个真正的 HTTP 请求一样,但没有启动服务器的成本。为此,我们将使用 Spring 的 MockMvc,我们可以通过在测试用例上使用 @AutoConfigureMockMvc 注释来请求为我们注入它:


推荐阅读