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

Spring Boot RestController测试返回404

戚澄邈
2023-03-14

我试图测试我的RestController代码(Spring Boot项目),但我总是得到404。以下是我目前掌握的情况:

@RestController("/service")
public class ServiceInteractionController {

@Autowired
private PairingService pairingService;

@GetMapping("/registered/{sensorId}")
public ResponseEntity isSensorRegistered(@PathVariable String sensorId) {
    return ResponseEntity.ok(pairingService.isSensorRegistered(sensorId));
}

}

@RunWith(SpringRunner.class)
@WebMvcTest(ServiceInteractionController.class)
public class ServiceInteractionControllerTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private PairingService pairingService;

@Before
public void setUp() {
    Mockito.when(pairingService.isSensorRegistered(TestConstants.TEST_SENSOR_ID))
            .thenReturn(true);
}

@Test
public void testIsSensorRegistered() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
            .andExpect(MockMvcResultMatchers.status().isOk());
}

}

结果总是这样:

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = service/registered/test123Id
       Parameters = {}
          Headers = []
             Body = <no character encoding set>
    Session Attrs = {}

Handler:
             Type = null

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 404
    Error message = null
          Headers = []
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

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

我做错了什么?我已经尝试过直接在setUp方法中用标准设置()初始化mockmvc,我还使用了@SpringBootTest和@AutoConfigreMockMvc相结合。

有人有什么有用的提示吗?我使用spring boot 2.1.4。

谢谢

共有2个答案

何甫
2023-03-14

尝试将此函数更改为:

@PathVariable 
@Test
public void testIsSensorRegistered(@PathVariable sensorId ) throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
            .andExpect(MockMvcResultMatchers.status().isOk());
}
杨赞
2023-03-14

您是否错过了服务/registered/{sensorId}之前的“/”键?

mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
        .andExpect(MockMvcResultMatchers.status().isOk()); 
 类似资料:
  • 我试着去模拟课堂,但我总是得到一个NPE。我见过当stubing方法时发布mockito-nullPointerException。在这篇文章中,他们这样解释: 我几乎可以肯定这也适用于我的问题。但我找不到解决办法。我已经试了10个小时了。 我还读了一些关于@autowired和@before的东西,显然@autowired是在@before之前创建的,这也可以解释我的NPE。 在@test vo

  • 我目前正在研究如何测试我的ElasticSearch类的覆盖率,它实现了ResHighLevel客户端。问题是它返回指向RestHighLevelClient.class.的空指针,我是ES的新手,我不知道我哪里出错了。 这是我的ElasticSearch类: 这是我的测试案例: 我的端口已在app.properties中设置为9200。 请在这方面给我一些帮助。我真的需要解决这个问题。任何帮助都

  • 问题内容: 在尝试JUnit时,我尝试如下测试一个简单的私有方法,该方法接收String并确保其中不包含单词’Dummy’。 我知道,可以将测试 与类 放在同一包 中,并将方法的访问修饰符更改为包,但是我想使用反射来学习这一点。 我试图通过反射访问私有方法,但测试失败!它显示以下异常: 基于这个问题的答案,我也正在抓。 JUnit的 问题答案: 我在上面的评论中同意@Stultuske,并将测试重

  • 我试图实现一个单元测试的在与。 我在关注这个链接,它运行良好,但结果为空,当我用浏览器测试我的websocket时,它会发送所需的结果。 让我展示一下我的测试课 } 这是我的< code > WebSocketConfiguration 类 } 这是我从服务器得到的响应 更新: 在下面的答案中添加建议的更改并经过进一步的研究后,我的测试类现在看起来像这样 } 经过这些更改后,我现在可以将堆栈跟踪打

  • 测试方法: 测试用例:

  • 问题内容: 我对如何在Mocha测试中包装嵌套的异步回调感到困惑。这是令人讨厌的代码示例:正在调用Amazon S3以检查文件是否存在: 代码挂起等待完成(如果我省略done())-或者,代码完成而没有回调,或者,节点抱怨done()被多次调用。 在下面的帮助下,我可以正常工作了,但看起来像是异步伏都炖菜 问题答案: 尝试使用async.serial。在第一个条目内,使用async.each运行多