【问题标题】:Spring Data JPA: Managing and mocking optional recordsSpring Data JPA:管理和模拟可选记录
【发布时间】:2020-10-13 00:30:07
【问题描述】:

我只是想确保我不会发疯,但粗体方法会评估回购中是否不存在预订,对吗?我正在运行测试,当通过模拟的 id 时抛出异常。

public class BookingServices {

    @Autowired
    BookingRepo bookingRepo;

    public Booking findBookingByBookingID(long bookingID) {
        if (! bookingRepo.existsById(bookingID)) {
            log.error("Booking not found");
            throw new BookingException("Booking not found");
        }

        return bookingRepo.findById(bookingID).get();
    }


**

测试类

**

 class BookingServicesTest {
    
        @InjectMocks
        private BookingServices bookingServices;
    
        @Mock
        private BookingRepo mockRepo;
    
        @BeforeEach
        void init(){
            MockitoAnnotations.initMocks(this);
        }
    
    
        @Test
        void findBookingByBookingID() {
            LocalDate bookingDate= LocalDate.of(2020,6,9);
            LocalDateTime scheduledDate =LocalDate.of(2020,7,4).atTime(6,30);
    
            Booking booking = new Booking();
            booking.setUserId(12345);
            booking.setBookingDate(bookingDate);
            booking.setScheduleDateTime(scheduledDate);
    
            Mockito.when(mockRepo.findById(5L)).thenReturn(Optional.of(booking));
    
            System.out.println(mockRepo.findById(5L));
            assertEquals(Optional.of(booking),bookingServices.findBookingByBookingID(5L));
        }

【问题讨论】:

  • 你可以调用return bookingRepo.findById(bookingID).orElseThrow(BookingException::new);然后你只需要调用一次数据库。
  • 这真是个好主意!谢谢!

标签: spring spring-boot spring-mvc jpa spring-data-jpa


【解决方案1】:

正如评论中所建议的,findById() 返回 Optional 模态,我们可以使用 or、orElse、orElseThrow、ifPresent 等。在这里,您可以像使用 BookingException 一样使用 orElseThrow。您可以按如下方式删除existsById()

public Booking findBookingByBookingID(long bookingID) {
    return bookingRepo.findById(bookingID).orElseThrow(() -> new  BookingException("Booking not found"));
}

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 2017-12-23
    • 2017-01-13
    • 2016-12-07
    • 1970-01-01
    • 2018-02-26
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多