【问题标题】:How to enforce MockitoJUnitRunner fail without basic http authentication?如何在没有基本 http 身份验证的情况下强制 MockitoJUnitRunner 失败?
【发布时间】:2020-02-12 12:44:47
【问题描述】:

我编写了一个Spring Boot 应用程序,并且能够使用MockMvc 访问和测试Controller。问题是在测试期间没有强制执行安全性,我可以在没有用户的情况下访问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());
    }

}

我的SecurityConfig StackOverflow QA

【问题讨论】:

  • 您正在使用 Mockito 运行,您正在创建您赢得的控制器实例,应该如何实施安全性?而是使用 @WebMvcTest,如 Spirng Boot 参考指南中所述。或者,如果您真的想坚持这一点,请按照 Spring Security 参考指南中的说明启用测试安全性。但是,我建议坚持使用@WebMvcTest
  • @M.Deinum 我仍然很难理解如何使用MockitoJUnitRunner 启用安全性。你能指出我在 Spring Security 参考中的确切位置可以找到这些信息吗?
  • The testing chapter 是一个相当大的赠品。

标签: java spring-boot unit-testing controller mockito


【解决方案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 文档或一些教程以获取更多信息

【讨论】:

  • 这个答案很好,但问题是它不能解决我的问题。我巩固了对 Web 层的理解,但如何将安全部分包含到测试中?我使用spring-security 模块。
  • 那么您的配置中可能还有另一个问题:默认情况下,使用@WebMvcTest 注解的测试也会自动配置 Spring Security 和 MockMvc(引用自 javadoc)通常然后,您可以使用注释 WithMockUser 来模拟您的测试的现有授权。 javadoc
  • 您可能想尝试使用 @SpringBootTest 而不是 @WebMvcTest 并另外添加 @AutoConfigureMockMvc。这将加载您的整个应用程序配置并配置 mockMvc。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2013-01-02
  • 2012-08-25
  • 2012-10-06
  • 2022-01-09
相关资源
最近更新 更多