使用 Mockito 测试服务的删除方法

我尝试为我的删除方法进行服务模拟测试。


这是我的RestoranServiceImpl.java中的删除方法


public void deleteRestoran(Long idRestoran) {

        RestoranModel restoran = getRestoranByIdRestoran(idRestoran).get();

        if(restoran.getListMenu().size()==0){

            restoranDb.delete(restoran);

        }else{

            UnsupportedOperationException unsupportedOperationException = new UnsupportedOperationException();

            throw unsupportedOperationException;

        }

    }

这是我的RestoranDb.java


public interface RestoranDb extends JpaRepository<RestoranModel,Long> {

    Optional<RestoranModel> findByIdRestoran(Long idRestoran);

}

这是到目前为止我的删除方法


@Test

    public void whenDleleteValidRestoranItShouldCallRestoranRepositoryDelete() {

        RestoranModel newRestoran = new RestoranModel();

        newRestoran.setIdRestoran((long) 1);

        newRestoran.setNama("mekdi");

        newRestoran.setAlamat("pacil");

        newRestoran.setNomorTelepon(14045);

        restoranService.addRestoran(newRestoran);

        verify(restoranDb, times(1)).save(newRestoran);

        System.out.println(restoranService.getRestoranList().size());

        when(restoranDb.findByIdRestoran((long)1).get()).thenReturn(newRestoran).thenReturn(null);

        restoranService.deleteRestoran(newRestoran.getIdRestoran());

        verify(restoranDb, times(1)).delete(newRestoran);

    }

当我尝试运行它时,我收到此错误。


java.util.NoSuchElementException: No value present


我试图四处寻找解决方案,但找不到适合我的解决方案。


智慧大石
浏览 104回答 1
1回答

慕田峪7331174

我认为你在这里模拟了错误的方法,你应该模拟RestoranDb.findByIdRestoran方法,而不是Optional.get方法when(restoranDb.findByIdRestoran((long)1).get()).thenReturn(newRestoran).thenReturn(null);应该when(restoranDb.findByIdRestoran((long)1)).thenReturn(Optional.of(newRestoran));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java