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);
    
}