Как я могу написать тесты JUnit для моих классов контроллера Spring-MVC?

Я хочу написать тест JUnit (модуль Java) для моего UserController класс, но я не знаю, как я могу это сделать.

UserController:

@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);

 }

UserService:

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

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

UserServiceImpl:

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;
    }
}

1 ответ

Решение

Вы можете использовать Spring's MockMvc, Проверьте детали по адресу: https://spring.io/guides/gs/testing-web/

Другой полезный подход заключается в том, чтобы вообще не запускать сервер, а тестировать только уровень ниже того, где Spring обрабатывает входящий HTTP-запрос и передает его вашему контроллеру. Таким образом, используется почти полный стек, и ваш код будет вызываться точно так же, как если бы он обрабатывал настоящий HTTP-запрос, но без затрат на запуск сервера. Для этого мы будем использовать Spring MockMvc, и мы можем попросить нас сделать это, используя аннотацию @AutoConfigureMockMvc в тестовом примере:

Другие вопросы по тегам