>我有端点,我需要检查用户是否已登录,如果不是这种情况,则重定向到登录页面。我正在抛出自定义异常,然后在其他类中使用异常处理程序,如下所示
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
private final DomainsService domainsService;
@ExceptionHandler(value = {UserNotLoggedInException.class})
protected RedirectView handleUserNotLoggedException() {
String defaultDomainName = domainsService.getDefaultDomainName();
String loginUrl = "https://" + defaultDomainName + "/login.php";
return new RedirectView(loginUrl);
}
}
我能够测试登录 URL 的获取并且是正确的,但我没有任何 UI 可以测试此逻辑是否确实会重定向到登录 URL。我认为有可能使用 MockMvc 进行测试,但随后我需要指定 url 并且 url 是从数据库中获取的,所以我不能只对 url 进行硬编码
你用 MockMvc 做对了。您唯一缺少的就是为域名服务注入模拟。
您可以DomainsService
一个接口,并使用@Profile
实现它进行测试和生产。在测试中,可以返回测试服务器的 url,并在测试中verify
终结点是否命中。
另外顺便说一句,我认为您的@ControllerAdvice
中缺少一些东西.@ControllerAdvice(basePackageClasses = MyRestController.class)