gpt4 book ai didi

Spring Boot 测试 : exception in REST controller

转载 作者:行者123 更新时间:2023-12-03 21:09:55 26 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,想通过集成测试来覆盖我的 REST Controller 。
这是我的 Controller :

@RestController
@RequestMapping("/tools/port-scan")
public class PortScanController {
private final PortScanService service;

public PortScanController(final PortScanService portScanService) {
service = portScanService;
}

@GetMapping("")
public final PortScanInfo getInfo(
@RequestParam("address") final String address,
@RequestParam(name = "port") final int port)
throws InetAddressException, IOException {
return service.scanPort(address, port);
}
}

在其中一个测试用例中,我想测试该端点在某些情况下会引发异常。这是我的测试课:
@RunWith(SpringRunner.class)
@WebMvcTest(PortScanController.class)
public class PortScanControllerIT {
@Autowired
private MockMvc mvc;

private static final String PORT_SCAN_URL = "/tools/port-scan";

@Test
public void testLocalAddress() throws Exception {
mvc.perform(get(PORT_SCAN_URL).param("address", "192.168.1.100").param("port", "53")).andExpect(status().isInternalServerError());
}
}

最好的方法是什么?当前实现不处理从 PortScanController.getInfo() 抛出的 InetAddressException ,当我开始测试时,我收到并出错:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.handytools.webapi.exceptions.InetAddressException: Site local IP is not supported

不可能在 @Test 注释中指定预期的异常,因为原始的 InetAddressException 是用 NestedServletException 包装的。

最佳答案

Spring Boot 测试包自带 AssertJ它有非常方便的方法来验证抛出的异常。

要验证原因:

@Test
public void shouldThrowException() {
assertThatThrownBy(() -> methodThrowingException()).hasCause(InetAddressException .class);
}

还有一些你可能感兴趣的方法。我建议看看 docs .

关于Spring Boot 测试 : exception in REST controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com