java - 使用 MockMVC 在 JUnitTest 中注册 @ControllerAdvice 带注释的 Controller

标签 java spring spring-mvc junit mockmvc

我的 @ControllerAdvice 带注释的 Controller 如下所示:

@ControllerAdvice
public class GlobalControllerExceptionHandler {

    @ResponseStatus(value = HttpStatus.UNAUTHORIZED)
    @ExceptionHandler(AuthenticationException.class)
    public void authenticationExceptionHandler() {
    }
}

当然,我的开发是测试驱动的,我想在 JUnit 测试中使用我的异常处理程序。我的测试用例如下所示:

public class ClientQueriesControllerTest {

    private MockMvc mockMvc;

    @InjectMocks
    private ClientQueriesController controller;

    @Mock
    private AuthenticationService authenticationService;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    public void findAllAccountRelatedClientsUnauthorized() throws Exception {
        when(authenticationService.validateAuthorization(anyString())).thenThrow(AuthenticationException.class);

        mockMvc.perform(get("/rest/clients").header("Authorization", UUID.randomUUID().toString()))
                .andExpect(status().isUnauthorized());
    }
}

可能我需要注册 ControllerAdvice 类。该怎么做?

最佳答案

从 Spring 4.2 开始,您可以将 ControllerAdvice 直接注册到 StandaloneMockMvcBuilder 中:

MockMvcBuilders
     .standaloneSetup(myController)
     .setControllerAdvice(new MyontrollerAdvice())
     .build();

关于java - 使用 MockMVC 在 JUnitTest 中注册 @ControllerAdvice 带注释的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604215/

相关文章:

java - 如何在不使用递归的情况下实现双向实体引用,示例如下

java - 如何在 Android 上的 HttpUrlConnection 中禁用对 401 上的 WWW-Authenticate header 的检查?

spring - 由于 ehcache,无法编译 spring-security-core

spring - Gradle构建没有完成

系统重启后MySql数据库恢复到之前的状态

java - 通过分页写入 Jena RDF 模型

javascript - thymeleaf 如何将 id 从下拉列表传递到另一个 html

java - Spring Controller 枚举请求验证

Spring 启动: EL1003E property values casting

Java List<Map<String, Long>> 映射键的分组总和