【问题标题】:Java Mocking method calls with Date as parameters以 Date 为参数的 Java Mocking 方法调用
【发布时间】:2021-03-31 21:07:17
【问题描述】:

我有一个存储库方法,可以在其中获取两个日期之间的交易。我想模拟这个方法,但即使我在我的真实函数调用和模拟函数调用中设置了相同的日期,当 mockito 比较这些日期时它会导致 false 并且不会调用模拟方法。

这是我的测试代码:

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.HOUR_OF_DAY,00);
cal.set(Calendar.MINUTE,00);
cal.set(Calendar.SECOND,00);
Date test = cal.getTime();
Date start = cal.getTime();
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
Date end = cal.getTime();
Mockito.when(transactionRepository.findAllByDateBetween(start,end, PageRequest.of(1,5))).thenReturn(
                Arrays.asList(
                        new Transaction(1l, new Date(), new BigDecimal(10), "USD", new BigDecimal(80), "TRY"),
                        new Transaction(2l, new Date(), new BigDecimal(10), "GBP", new BigDecimal(100), "TRY")
                ));

这是我的服务代码:

Calendar cal = Calendar.getInstance();
cal.setTime(transactionDate);
cal.set(Calendar.HOUR_OF_DAY,00);
cal.set(Calendar.MINUTE,00);
cal.set(Calendar.SECOND,00);
Date start = cal.getTime();
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
Date end = cal.getTime();
return transactionRepository.findAllByDateBetween(start,end, PageRequest.of(page,pageSize)).stream().map(t -> t.toDto()).collect(Collectors.toList());

如何模拟此存储库方法并使其在以特定日期调用时返回所需的值?

【问题讨论】:

    标签: java mockito


    【解决方案1】:

    试试……

    Mockito.doAnswer(invocation -> List.of(
            new Transaction(1L, new Date(), new BigDecimal(10), "USD", new BigDecimal(80), "TRY"),
            new Transaction(2L, new Date(), new BigDecimal(10), "GBP", new BigDecimal(100), "TRY")
    )).when(transactionRepository).findAllByDateBetween(any(),any(), any());
    

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2016-04-02
      • 2020-01-21
      • 2019-08-25
      • 1970-01-01
      • 2015-03-13
      • 2013-11-03
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多