spring-boot - 验证方法中的参数是不同的错误,因为输入参数的类型为时间戳
问题描述
我正在尝试通过模拟存储库来测试 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 测试在验证调用时失败,因为在调用存储库时时间戳有微小差异,错误如下:
论据不同!通缉:collRepository.updateColActivity(5044, 2019-10-28 12:44:49.738);
实际调用有不同的参数: collRepository.updateColActivity( 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()
如果您不确定数据类型,也可以使用。
推荐阅读
- javascript - 在 Nuxt.js 中禁用客户端水合或停止在 Nuxt.js 中公开原始数据
- javascript - 在 React 中为子元素设置动画的正确方法是什么?
- c# - 如何从 wcf 响应的 ExtensionDataObject 中获取值
- ios - 在 Swift 中存储异步 Cloud Firestore 查询结果
- jquery - 使用JQuery“追加”功能,如何将相同的字符串添加到具有相同类的所有div?(只工作一次)
- python - 如何计算 Selenium Python 中值大于 0 的属性的数量?
- java - 在结果数据框中没有重复列的多列上连接 2 个数据框 - Java
- r - ggplot2 中相对于图像的中心图例
- scala - 如何将 Spark DataFrame 作为 CSV 存储到 Azure Blob 存储中
- scala - 如何在 REPL 中使用 :phase power 命令?