gpt4 book ai didi

java - Spring:未能捕获抛出的异常

转载 作者:行者123 更新时间:2023-12-01 19:47:05 24 4
gpt4 key购买 nike

我有以下负面测试代码(需要失败并抛出异常):

@Test
public void testInventoryControllerGetNonExistingRegion() {

final String name = "ME_2";
RegionConfiguration refRegionConfiguration = prepareReferenceObject(name);

try(
inventoryRegionController.get(null,name);
} catch (EntityDoesNotExistException e){

//report something...
}
}

测试调用以下方法 get() 并应该抛出 EntityDoesNotExistException 对象。

@ApiOperation(value = "Get a region")
@RequestMapping(value = "regions/{" + REGION + "}", method = RequestMethod.GET)
public RegionConfiguration get(@RequestHeader(value = AUTHORIZATION_HEADER, defaultValue = "Bearer {{JWT}}") String authorization,
@PathVariable(REGION) String regionName) throws EntityDoesNotExistException {

InventoryRegionEntity inventoryRegionEntity = null;
inventoryRegionEntity = RegionInventoryService.find(regionName);

if(null != inventoryRegionEntity)
return RegionConfigurationMapper.mapInventoryRegionEntity(inventoryRegionEntity);
else
throw new EntityDoesNotExistException(InventoryRegionEntity.class, regionName);
}

get() 方法确实抛出所需的异常(我有一个断点并经过验证)!但我的测试从未发现它。那是因为我得到的是

HttpServerErrorException: 500 null

而这个异常确实是被catch子句捕获的。为什么会出现这种情况?

谢谢!

最佳答案

问题是 Spring 为你做了一些艰苦的工作。在这种特殊情况下,您的异常将被封装为 HTTP 错误,因为 REST 只是一种方法。由于您没有任何有关异常映射的配置,服务器会将其转换为 HTTP 500 - 服务器错误。我认为您进行测试的最佳方法是

@Test
public void testInventoryControllerGetNonExistingRegion() {
final String name = "ME_2";
RegionConfiguration refRegionConfiguration = prepareReferenceObject(name);

try(
inventoryRegionController.get(null,name);
Assert.fail(); // don't forget to fail your test in no exception thrown
} catch (HttpServerErrorException e){
Assert.notNull(e);
Assert.assertTrue(e.getCause() instanceof EntityDoesNotExistException);
}
}

希望对你有帮助!

关于java - Spring:未能捕获抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52816679/

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