Java 中抛出异常的单元测试?
Unit Test for throw Exception in Java?
我想在我的 Java 应用程序中使用 JUnit 创建单元测试以测试以下方法:
private void checkModels(PriceRequest request) {
final UUID productUuid = menuService.findProductUuidByUuid(request.getMenuUuid());
if (!menuRepository.existsByMenuUuidAndProductUuid(request.getMenuUuid(), productUuid)) {
throw new EntityNotFoundException(MENU_ENTITY_NAME);
}
}
我创建了以下测试方法:
public void shouldThrowExceptionWhenMenuUuidNotExists() {
PriceRequest request = generatePriceRequest();
when(!menuRepository.existsByUuid(request.getMenuUuid()))
.thenThrow(new EntityNotFoundException(MENU_ENTITY_NAME));
}
private PriceRequest generatePriceRequest() {
PriceRequest request = new PriceRequest();
request.setMenuUuid(UUID.randomUUID());
return request;
}
但是,它总是通过测试,我想我在测试方法中设置值时犯了一个错误。那么,我应该如何解决这个问题以及我应该如何创建一个单元测试该方法?
如果你想测试方法 checkModels() 是否会在 demoService.existsByMenuUuidAndProductUuid 为 return false 时抛出异常,那么你可以像这样检查它
private PriceRequest generatePriceRequest() {
PriceRequest request = new PriceRequest();
request.setMenuUuid("ABC"); // it's bad idea to always run test everytime with different values
return request;
}
@Test(expected = NullPointerException.class)
public void shouldThrowExceptionWhenMenuUuidNotExists() {
PriceRequest request = generatePriceRequest();
when(demoService.existsByMenuUuidAndProductUuid(any()).thenReturn(false);
SomeClass.checkModels(request);
}
我想在我的 Java 应用程序中使用 JUnit 创建单元测试以测试以下方法:
private void checkModels(PriceRequest request) {
final UUID productUuid = menuService.findProductUuidByUuid(request.getMenuUuid());
if (!menuRepository.existsByMenuUuidAndProductUuid(request.getMenuUuid(), productUuid)) {
throw new EntityNotFoundException(MENU_ENTITY_NAME);
}
}
我创建了以下测试方法:
public void shouldThrowExceptionWhenMenuUuidNotExists() {
PriceRequest request = generatePriceRequest();
when(!menuRepository.existsByUuid(request.getMenuUuid()))
.thenThrow(new EntityNotFoundException(MENU_ENTITY_NAME));
}
private PriceRequest generatePriceRequest() {
PriceRequest request = new PriceRequest();
request.setMenuUuid(UUID.randomUUID());
return request;
}
但是,它总是通过测试,我想我在测试方法中设置值时犯了一个错误。那么,我应该如何解决这个问题以及我应该如何创建一个单元测试该方法?
如果你想测试方法 checkModels() 是否会在 demoService.existsByMenuUuidAndProductUuid 为 return false 时抛出异常,那么你可以像这样检查它
private PriceRequest generatePriceRequest() {
PriceRequest request = new PriceRequest();
request.setMenuUuid("ABC"); // it's bad idea to always run test everytime with different values
return request;
}
@Test(expected = NullPointerException.class)
public void shouldThrowExceptionWhenMenuUuidNotExists() {
PriceRequest request = generatePriceRequest();
when(demoService.existsByMenuUuidAndProductUuid(any()).thenReturn(false);
SomeClass.checkModels(request);
}