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()
。
我正在尝试通过模拟存储库来测试 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()
。