小编典典

没有基本的HTTP身份验证,如何强制MockitoJUnitRunner失败?

spring-boot

我写一个Spring Boot应用程序,我能访问和测试ControllerMockMvc。问题在于,在测试过程中未强制执行安全性,并且我无法Controller在没有用户的情况下访问。

我做错什么了吗?它是预期的行为吗?

ControllerTest 类:

@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {

    private MockMvc mockMvc;

    @Mock
    private Service service;

    @InjectMocks
    private Controller controller;

    private final static String URL = "/test";

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    public void test() throws Exception {
        mockMvc.perform(get(URL))
        .andExpect(status().isOk());
    }

}

阅读 278

收藏
2020-05-30

共1个答案

小编典典

您的示例使用普通的单元测试来测试您的控制器。在此设置中,控制器由Mockito创建(控制器字段由Mockito的@InjectMocks注释)。

Mockito不了解Spring,因此在您的测试中不会设置Spring Security。

您需要使用SpringRunner来运行测试。该运行程序具有Spring意识,可以让您在运行测试之前正确初始化控制器。

测试应该看起来像这样(junit5):

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = Controller.class)
public class ControllerTest {
  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private Service serviceMock;

   @Test
    public void test() throws Exception {
        mockMvc.perform(get(URL))
        .andExpect(status().isOk());
    }

}

查看我们的Spring文档或一些教程以获取更多信息

2020-05-30