为什么Spring测试失败了,所以无法使用@MockBean
我尝试为一个简单的spring-boot控制器创建我的第一个测试,但是得到了Handler: Type =
null。在浏览器中,代码有效,但测试失败。我的应用程序使用spring-security。请帮助我解决问题并了解我的错误。谢谢。
这是控制器:
private final ItemService service;@GetMapping("/get_all_items")
public String getAllItems(Model model) {
model.addAttribute("items", service.getAll());
return "all_items";
}
这是一个测试。
@RunWith(SpringRunner.class)@WebMvcTest(ItemController.class)
public class ItemControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private ItemService itemService;
@Test
@WithMockUser(username = "user", roles = "user")//mock security.
public void whenGetAllItemsThenControllerReturnAllItems() throws Exception {
given(
itemService.getAll()
).willReturn(
new ArrayList<Item>()
);
mvc.perform(
get("/get_all_items").accept(MediaType.TEXT_HTML)
).andExpect(
status().isOk()
);
}
}
这是结果日志:
MockHttpServletRequest:HTTP方法= GET请求URI = / get_all_items参数= {}标头= {Accept =
[text / html]}
处理程序:类型= null
异步:异步开始=假异步结果=空
解决的异常:类型= null
ModelAndView:视图名称= null视图= null模型= null
FlashMap:属性= null
MockHttpServletResponse:状态= 403错误消息=访问被拒绝标头= {X-Content-Type-Options =
[nosniff],X-XSS-Protection = [1; 模式=块],缓存控制= [无缓存,无存储,最大年龄= 0,必须重新验证],语料=
[无缓存],到期时间= [0],X帧选项= [ DENY],Strict-Transport-Security = [max-age =
31536000; includeSubDomains]}内容类型= null正文=转发的URL = null重定向的URL = null
Cookies = []
java.lang.AssertionError:预期状态:200实际:403
回答:
解决的办法是 导入
的@Configuration
类的spring安全配置,除了声明@WebMvcTest(ItemController.class)
像这样@Import(SecurityConfig.class)
(假设你的自定义配置为Spring
Security是在一个名为类SecurityConfig
)。
您可能还会发现Spring Boot的问题跟踪器中的讨论也很有帮助:https : //github.com/spring-projects/spring-
boot/issues/6514
以上是 为什么Spring测试失败了,所以无法使用@MockBean 的全部内容, 来源链接: utcz.com/qa/429637.html