Verify 方法中的 Arguments are different 错误,因为输入参数的类型为 Timestamp

Arguments are different error in Verify method because input parameter is of type Timestamp

我正在尝试通过模拟存储库来测试 Spring JPA 存储库。存储库的输入参数是 long 和 timestamp 类型。

问题的产生是因为两次调用之间输入的时间戳不同。我尝试使用 argThat 但无法将其用于时间戳对象。还有其他方法可以解决这个问题吗?

`@Before
public void setUp(){
    MockitoAnnotations.initMocks(this);
    collActivity = new CollActivity();
    Long time = System.currentTimeMillis();     
    Timestamp lastUpdate = new java.sql.Timestamp(time);
    collActivity.setCollId(1162L);
    collActivity.setGId(new BigDecimal(25));
    collActivity.setLastUpdate(lastUpdate);     
}`

`@Test
public void testUpdateCollActivity(){   
        Long collectionID = 5044L;      
        Long time = System.currentTimeMillis();                 
        when(typeRepo.getCollId(new Long(100033334L))).thenReturn(new 
     BigDecimal(2244));
        when(collRepository.updateCollActivity(collID, 
     lastUpdate)).thenReturn(1);            
        int i = collAcivityController.updateCollActivity("1000234");
     verify(collRepository).updateCollActivity(collID,
                                           collActivity.getLastUpdate());
}

JUnit 测试在验证调用时失败,因为调用存储库时时间戳有细微差别,错误如下:

Argument(s) are different! Wanted: collRepository.updateCollActivity( 5044, 2019-10-28 12:44:49.738 );

Actual invocation has different arguments: collRepository.updateCollActivity( 5044, 2019-10-28 12:44:49.777 );

您可以在这些类型的情况下使用 Mockito.any()

@Test
public void testUpdateCollActivity(){   
        Long collectionID = 5044L;      
        Long time = System.currentTimeMillis();                 
        when(typeRepo.getCollId(Mockito.anyLong())).thenReturn(new 
     BigDecimal(2244));
        when(collRepository.updateCollActivity(Mockito.anyLong(), 
     Mockito.anyLong())).thenReturn(1);            
        int i = collAcivityController.updateCollActivity("1000234");
     verify(collRepository).updateCollActivity(collID,
                                           collActivity.getLastUpdate());
}

如果您不确定数据类型,也可以只使用 Mockito.any()