我的方法如下所示
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
2条答案
按热度按时间tjjdgumg1#
从您提供的代码示例来看,eRepo.findById(id)似乎返回一个Optional。
接收该Optional,并检查Optional是否为空。如果不是,则返回EE示例,否则抛出指定的异常。
在您的测试中,不需要调用
因为您是在显式地嘲笑findById的行为。只需这样做:
a9wyjsp72#
我发布这篇文章是为了帮助大家更快地找到这个问题。我需要AssertJPA存储库中.orElseThrow()中异常的消息和条件。正常情况下返回Optional.of(someDataYouAlreadyMockedUp)是显而易见的,但是要获得异常,存储库流必须获得null(Empty),因此使用Optional.empty()...
在我的代码中
为了测试和AssertTest中的值,我这样模拟它:
然后这样称呼和Assert: