为什么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

回到顶部