java - spring JpaRepository 方法的存根
问题描述
我有下一个 JPQL 查询:
@Query(value = "select t.ts as ts, t.ko.eolink.guid as guid from ObjPar t "
+ "where t.tuser.cd = ?1 and t.lst.cd=?2 and t.ts between ?3 and ?4")
List<MeterData> findTimestampByUser(String userCd, String lstCd, Date dtFrom, Date dtTo);
其中 MeterData - 只是投影接口:
public interface MeterData {
Date getTs();
String getGuid();
}
现在我需要写一些类似存根的东西。我不需要执行我的查询,但我需要它返回 MeterData 列表。
我怎样才能实现它?我应该创建实现 MeterData 的类并实例化它吗?可能有人可以提示我更简单的方法吗?
我的解决方案:
List<MeterData> findTimestampByUser(String userCd, String lstCd, Date dtFrom, Date dtTo) {
class LocalMeterData implements MeterData {
public Date getTs() {
return new Date();
}
public String getGuid() {
return "2312-1316-4564-4654-4463";
}
}
List<MeterData> lst = new ArrayList<>(5);
MeterData elem = new LocalMeterData();
lst.add(elem);
lst.add(elem);
lst.add(elem);
lst.add(elem);
return lst;
}
解决方案
如果您需要存根存储库以进行单元测试,只需使用 Mockito。像您已经做的那样,在您的测试中将您的类实现声明为私有内部类,并指示 Mockito 使用它:
MeterData elem = new LocalMeterData();
Mockito.when(yourRepository.findTimestampByUser(anyString(), any(Date.class), any(Date.class)))
.thenReturn(Arrays.asList(elem, elem, elem, elem));
推荐阅读
- kernel - 如何修复'jupyter notebook server未能及时启动'或“端口8888已被使用,正在尝试另一个端口。”在vscode中?
- typescript - isMulti={true}时如何设置react-select组件状态?
- generics - Kotlin 将泛型类型与泛型类型的包装类混合在一起
- php - 将相同的键组合在一个数组中并在 smarty 中打印
- ruby-on-rails - Rails 将 /#/ 添加到根 url
- javascript - 每次请求都给出相同的输出
- oracle - 如果存在,如何为每个 ID 选择非 NA 值,否则在 Oracle 中选择 NA?
- c# - 如何从 Xamarin Forms Flyout 中的代码设置 MenuItemTemplate?
- react-native - React-Native:如何创建我的应用程序包
- django - Django 导入导出扩展用户