如何在使用WebMvcTest编写单元测试时向WebSecurityConfiguration提供bean

时间:2019-04-04 18:39:15

标签: spring-security spring-security-oauth2 spring-test

我正在为Spring Security oauth2配置的项目编写单元测试。为资源所有者密码凭据流配置了Oauth2。

我尝试通过向WebMvcTest注释提供(secure = false)来禁用安全性,该注释可以正常工作,但是我想在启用安全性的情况下编写单元测试。

单元测试如下:

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
class UserControllerTest {

@Autowired
MockMvc mockMvc;

@Test 
void test() {
RequestBuilder = MockMvcRequestBuilders.
    get("/api/users/").accept(MediaType.APPLICATION_JSON);
    MvcResult  mvcResult = mockMvc.perform(requestBuilder).andReturn();
    assertEquals("Some string", mvcResult.response().contentAsString());
  }
}

请注意,资源服务器将/ api / **配置为经过身份验证的端点。

现在,按照我的理解,@ WebMvcTest注释还将自动连接标有@EnableWebSecurity的类,该类依次使用构造函数注入自动连接请求匹配器bean,如下所示:

@Configuration
@EnableWebSecurity
class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Qualifier("resourceServerRequestMatcher")
    @Autowired
    private RequestMatcher requestMatcher;

    public WebSecurityConfiguration(RequestMatcher requestMatcher){
        this.requestMatcher = requestMatcher; 
    }
}

因此,当我运行单元测试时,出现以下异常。

Consider defining a bean of type 'org.springframework.security.web.util.matcher.RequestMatcher' in your configuration.

我确实理解异常在问什么,我对在单元测试类中应该如何完成感到有些困惑。

0 个答案:

没有答案