当前位置: 首页 > 知识库问答 >
问题:

Spring启动测试Rest控制器与分页

赵永新
2023-03-14

我正在尝试测试以下控制器:

@GetMapping("movies")
public Page<Title> getAllMovies(@PageableDefault(value=2) Pageable pageable){        
    return this.titleService.getTitleByType("Movie", pageable);
}

下面是测试类:

@RunWith(SpringRunner.class)
@WebMvcTest(TitleController.class)
@EnableSpringDataWebSupport
public class TitleControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private TitleService titleService;

    // Test controller method - getAllMovies
    @Test
    public void getAllMovies() throws Exception {
        Title title = new Title();
        title.setId((short)1);
        title.setName("The Godfather");
        title.setType("Movie");    

        List<Title> titles = new ArrayList<>();
        titles.add(title);
        Page<Title> page = new PageImpl<>(titles);

        given(this.titleService.getTitleByType("Movie", PageRequest.of(0,2))).willReturn(page);
        mockMvc.perform(MockMvcRequestBuilders.get("/movies"))
                .andExpect(status().isOk());
    }
}  

当我运行测试失败,并给我以下消息

java.lang.AssertionError: Status 
Expected :200
Actual   :500

当我测试的urlhttp://localhost:8080/movies正常工作。

共有1个答案

淳于枫
2023-03-14

我认为你没有正确地模拟/初始化你的标题服务,这就是你得到500响应代码的原因。

您可以通过模拟TitleService并将其传递给测试的控制器来修复它:

@RunWith(SpringJUnit4ClassRunner.class)
public class TitleControllerTest {

    private MockMvc mockMvc;

    private TitleController underTest;

    @Mock
    private TitleService titleService;

    @Before
    public void init() {
        underTest = new TitleController(titleService);

        //DO THE MOCKING ON TITLE SERVICE
        // when(titleService.getTitleByType()) etc.

        mockMvc = MockMvcBuilders
                .standaloneSetup(underTest)
                .build();
    }

    //your tests


}  

或:

@RunWith(SpringRunner.class)
@WebMvcTest(TitleController.class)
@EnableSpringDataWebSupport
public class TitleControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private TitleController titleController;

    @MockBean
    private TitleService titleService;

    @Before
    public void init() {
        titleController.setTitleService(titleService);

        //DO THE MOCKING ON TITLE SERVICE
        // when(titleService.getTitleByType()) etc.
    }

    //your tests

}  
 类似资料:
  • 我正在测试家庭控制器 我使用spring security作为用户名“user”,默认情况下作为密码进行测试,但@PreAuthorize不起作用 的结果 预期结果: 实际结果: 我错过了什么吗?

  • 我试图使用mockmvcbuilders.standalonesetup方法为一个spring mvc rest控制器创建一个非常基本的单元测试。我一直收到一个404错误。下面列出了测试应用程序上下文、测试类、控制器和整个堆栈跟踪。欢迎任何指导。 java.lang.AssertionError:状态应为:<200>但实际为:<404>在org.springframework.test.util.

  • 我有低于pom的。SpringBoot应用程序中的xml。在运行应用程序时,我没有遇到任何错误。但当我通过邮递员或浏览器点击URL时,控制器中的java代码不会被执行。 波姆。xml: 控制器: 项目执行截图: Spring Boot应用程序类: Spring启动存储库类: 将BasePackage添加为com后。下面是一个例外情况: 2022-03-21 09:51:35.169WARN 205

  • 我已经为此挣扎了一段时间了。我想使用restAs0007来测试我的SpringBoot REST应用程序。 虽然看起来容器旋转得很好,但请放心(其他任何东西似乎都有问题。 一直以来我都被拒绝连接。 我的测试类: 现在,对于奇怪的部分,传递并打印它应该传递的内容,但是正在获得连接拒绝异常。 知道这个装置有什么问题吗?

  • 嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro

  • easySwoole支持REST风格开发。在实现上,其实是对AbstractController进行了REST规则封装,本质上,也是一个控制器。 支持GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。 实例代码 namespace AppControllerRest; use CoreAbstractInterfaceAbstractREST; use CoreHttp