Check/Test 如果 RedirectView 将重定向到特定 url
Check/Test if RedirectView will redirect to specific url
我有一个端点,我需要在其中检查用户是否已登录,如果不是,则重定向到登录页面。我正在抛出自定义异常,然后在其他 class 中使用异常处理程序,就像这样
@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);
}
}
我能够测试 loginUrl 的获取,它是正确的,但我没有任何 UI 可以测试此逻辑是否确实会重定向到登录 url。我认为有可能使用 MockMvc 进行测试,但是我需要指定 url 并且 url 是从数据库中获取的,所以我不能只是硬编码 url
你用 MockMvc 做对了。您唯一缺少的是为 DomainService 注入模拟。
您可以拥有 DomainsService
接口并使用 @Profile
实现它以用于测试和生产。在您的测试中,您可以 return url 您的测试服务器和 verify
在您的测试中,端点被命中。
顺便说一句,我认为您 @ControllerAdvice
中遗漏了一些东西。 @ControllerAdvice(basePackageClasses = MyRestController.class)
我有一个端点,我需要在其中检查用户是否已登录,如果不是,则重定向到登录页面。我正在抛出自定义异常,然后在其他 class 中使用异常处理程序,就像这样
@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);
}
}
我能够测试 loginUrl 的获取,它是正确的,但我没有任何 UI 可以测试此逻辑是否确实会重定向到登录 url。我认为有可能使用 MockMvc 进行测试,但是我需要指定 url 并且 url 是从数据库中获取的,所以我不能只是硬编码 url
你用 MockMvc 做对了。您唯一缺少的是为 DomainService 注入模拟。
您可以拥有 DomainsService
接口并使用 @Profile
实现它以用于测试和生产。在您的测试中,您可以 return url 您的测试服务器和 verify
在您的测试中,端点被命中。
顺便说一句,我认为您 @ControllerAdvice
中遗漏了一些东西。 @ControllerAdvice(basePackageClasses = MyRestController.class)