处理或其他抛出
Handling orElseThrow
我的方法是这样的
public EP updateEP(long id, EP eP) {
EE eE = eRepo.findById(id).orElseThrow(EntityNotFoundException::new);
//some code
}
我的测试方法是这样的
@Test
public void testUpdateEWhenEExists() {
long id = 1l;
EE eE = new EE();
eE.setPosId(1l);
eE.setPosName("pos");
EPE ePE = new EPE();
ePE.setEId(id);
when(eRepo.findById(id).orElseThrow(EntityNotFoundException::new)).thenReturn(eE);
//some code
}
它总是抛出 EntityNotFoundException
。我想返回给我 eE 而不是 EntityNotFoundException
编辑
@Test
public void testUpdateEPWhenEExists() {
long id = 1l;
EE eE = new E();
eE.setPositionId(1l);
eE.setPosName("pos");
EPE ePE = new EPE();
ePE.setEId(id);
when(eRepo.findById(id)).thenReturn(Optional.of(eE));
}
在这种情况下错误是
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
EPE cannot be returned by findById()
findById() should return Optional
从您提供的代码示例看来,eRepo.findById(id) returns 是可选的。
eRepo.findById(id).orElseThrow(...)
接收 Optional 并基本上检查 Optional 是否为空。如果不是,它returns EE 的实例,否则它抛出指定的异常。
在你的测试中不需要调用
orElseThrow(EntityNotFoundException::new)
因为您明确地模拟了 findById 的行为。
就这样吧:
when(eRepo.findById(id)).thenReturn(Optional.of(eE));
我发布这个是为了帮助任何人更快地找到它。我需要在 JPA 存储库的 .orElseThrow() 中断言异常的消息和条件。正常情况对于 return Optional.of(someDataYouAlreadyMockedUp) 是显而易见的,但是要得到异常,存储库流必须得到一个 null (Empty) 所以使用 Optional.empty() ...
在我的代码中有
License license = licenseRepository.findById(licenseId).orElseThrow(() ->
new BadRequest("License " + licenseId + " not found."));
为了测试和断言测试中的值,我像这样模拟它:
when(licenseRepository.findById(1L)).thenReturn(Optional.empty());
然后像这样调用和断言:
try {
SomeDto result = someService.getSomeStuffByLicenseId(1L);
fail("should have already thrown exception here!");
}catch (BadRequest br) {
assertEquals("License 1 not found", br.getMessage());
}
我的方法是这样的
public EP updateEP(long id, EP eP) {
EE eE = eRepo.findById(id).orElseThrow(EntityNotFoundException::new);
//some code
}
我的测试方法是这样的
@Test
public void testUpdateEWhenEExists() {
long id = 1l;
EE eE = new EE();
eE.setPosId(1l);
eE.setPosName("pos");
EPE ePE = new EPE();
ePE.setEId(id);
when(eRepo.findById(id).orElseThrow(EntityNotFoundException::new)).thenReturn(eE);
//some code
}
它总是抛出 EntityNotFoundException
。我想返回给我 eE 而不是 EntityNotFoundException
编辑
@Test
public void testUpdateEPWhenEExists() {
long id = 1l;
EE eE = new E();
eE.setPositionId(1l);
eE.setPosName("pos");
EPE ePE = new EPE();
ePE.setEId(id);
when(eRepo.findById(id)).thenReturn(Optional.of(eE));
}
在这种情况下错误是
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
EPE cannot be returned by findById()
findById() should return Optional
从您提供的代码示例看来,eRepo.findById(id) returns 是可选的。
eRepo.findById(id).orElseThrow(...)
接收 Optional 并基本上检查 Optional 是否为空。如果不是,它returns EE 的实例,否则它抛出指定的异常。
在你的测试中不需要调用
orElseThrow(EntityNotFoundException::new)
因为您明确地模拟了 findById 的行为。 就这样吧:
when(eRepo.findById(id)).thenReturn(Optional.of(eE));
我发布这个是为了帮助任何人更快地找到它。我需要在 JPA 存储库的 .orElseThrow() 中断言异常的消息和条件。正常情况对于 return Optional.of(someDataYouAlreadyMockedUp) 是显而易见的,但是要得到异常,存储库流必须得到一个 null (Empty) 所以使用 Optional.empty() ...
在我的代码中有
License license = licenseRepository.findById(licenseId).orElseThrow(() ->
new BadRequest("License " + licenseId + " not found."));
为了测试和断言测试中的值,我像这样模拟它:
when(licenseRepository.findById(1L)).thenReturn(Optional.empty());
然后像这样调用和断言:
try {
SomeDto result = someService.getSomeStuffByLicenseId(1L);
fail("should have already thrown exception here!");
}catch (BadRequest br) {
assertEquals("License 1 not found", br.getMessage());
}