【问题标题】:Is it possible to create a test repository for mockMVC?是否可以为 mockMVC 创建测试存储库?
【发布时间】:2021-08-21 09:52:05
【问题描述】:

我有以下测试:

@AutoConfigureMockMvc
@SpringBootTest
public class ProjectDashboardTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void projectsDashboardShows() throws Exception {
        this.mockMvc
                .perform(get("/projects/1"))
                .andDo(print())
                .andExpect(status().isOk());
    }

    @Test
    public void projectFormShows() throws Exception {
        this.mockMvc
                .perform(get("/get-project-form/1"))
                .andDo(print())
                .andExpect(status().isOk());
    }

这些依赖于路径变量 1 = 用户 ID。为了让这些测试正常工作,必须有一个用户 id = 1 的用户帐户当前已登录。我将如何在 mockMVC 中模拟它?

【问题讨论】:

  • 你没有模拟它;该测试的前提是项目存在(“假设数据库中存在 ID 为 1 的项目”),因此可以通过 API 或使用相关存储库在数据库中创建它。
  • @jonrsharpe 所以在每个测试中我需要将项目添加到数据库中?我正在使用 h2 数据库,所以我不能持久化数据,因为测试必须通过构建。谢谢。
  • 在(或之前)每个需要创建项目的测试中,您需要创建一个项目,是的。
  • 谢谢,所以我可以在测试类本地范围内而不是在测试方法内创建一个项目?
  • 你应该使用 JUnit5 中的 @BeforeEach 方法。

标签: spring spring-boot testing mocking mockmvc


【解决方案1】:

您的选择很少,取决于您要创建的测试以及您拥有的配置(需要更多细节才能更准确地回答)。

对于单元测试,您可以模拟您的存储库(或服务)以及获取Project 的方法。例如,如果你有 ProjectServicegetProjectById(Long id) 方法,你可以使用类似的东西:

@AutoConfigureMockMvc
@SpringBootTest
public class ProjectDashboardTests {
    ...
    @MockBean
    private ProjectService service; // <- mock your service

    @Test
    public void projectsDashboardShows() throws Exception {
        // mock service method in selected test or in @BeforeEach method
        Mockito.when(service.getProjectById(ArgumentMatchers.anyLong())
                .thenReturn(new Project(/* your own test object*/)); 
        ...
    }
    ...
}

基于为了使这些测试正常工作,必须有一个当前登录的用户 id = 1 的用户帐户,我假设您使用 Spring Security?如果您想模拟选定的用户,可以查看@WithMockUser 注释。

对于集成测试,您应该只为测试准备数据库(例如 H2),在 每个 测试之前将项目添加到数据库并在 每个 测试之后删除(独立运行) .

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 2016-05-15
    • 2013-06-06
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2015-05-04
    相关资源
    最近更新 更多