我有一个Spring-Boot + Spring-Security的项目。在这个项目中,我使用了典型的MVC架构。
我的控制器看起来像:
@RestController
DemoController
{
public ResponseEntity<?> get(@AuthenticationPrinciple UserPrinciple userPrinciple)
{
return ...
}
}
我想用WebMvcTest测试这个控制器类。我知道我可以用SpringBootTest轻松地处理它,但是SpringBootTest不省时...
我创建了一个测试类,如下所示:
@WebMvcTest(controllers = {DemoController.class})
DemoControllerTest
{
@Autowired
private MockMvc mockMvc;
@Test
void test_get()
{
this.mockMvc.perform(get("/...")
.header(AUTH_HEADER, getAuthorizationHeader())
.andExpect(status().isOk());
}
}
但我得到了错误,如userPrinciple为空或org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.sha.springbootbookseller.security.CustomUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate.
如何在WebMvcTest中注入AuthenticationPrinciple?
示例代码:https://github.com/senolatac/spring-boot-book-seller
测试类别:https://github.com/senolatac/spring-boot-book-seller/blob/master/src/test/java/com/sha/springbootbookseller/controller/PurchaseHistoryControllerTest.java
1条答案
按热度按时间kzipqqlq1#
通过添加以下内容解决了该问题:
和嘲笑
最终结果如下所示:
您可以从以下位置找到示例代码:https://github.com/senolatac/spring-boot-book-seller