当前位置: 首页 > 知识库问答 >
问题:

模拟投影结果Spring Data JPA

拓拔元徽
2023-03-14

我正在使用Spring Data JPA在我的spring boot项目。

我正在激发一个JPQL查询,并使用一个投影来存储查询的结果。我的投影:

public interface VeryBasicProjection {
    String getTitle();
    String getUrl();
}

我的服务调用此投影:

public List<VeryBasicDTO> getLatestData(int limit){

        // Pageable for Limit
        Pageable pageable = new PageRequest(0, limit);

        // Get Data from DB
        List<VeryBasicProjection> latestData = tableRepository.getLatestData("live", 2,pageable);
        List<VeryBasicDTO> responseDTO = new ArrayList<>();

        // Map Projection to DTO
        for(VeryBasicProjection veryBasicProjection : latestData){
            VeryBasicDTO veryBasicDTO = new VeryBasicDTO();
            veryBasicDTO.buildDTO(veryBasicProjection);
            responseDTO.add(veryBasicDTO);
        }

        return responseDTO;
    }

现在我想使用Mockito(单元测试用例)测试这个服务,我正在使用when和thenreturn模拟对存储库的调用。

我的问题是如何模拟存储库的结果?回信里应该有什么?我的意思是,我如何创建投影实例并将数据设置到它?

共有1个答案

袁羽
2023-03-14

如果希望创建投影的实例而不创建实现接口的类,则可以使用SpelawareProxyProjectionFactory。

import org.springframework.data.projection.ProjectionFactory;
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;

...
ProjectionFactory factory = new SpelAwareProxyProjectionFactory();
VeryBasicProjection projection = factory.createProjection(VeryBasicProjection.class);
projection.setTitle("theTitle");
projection.setUrl("theUrl");

您还需要在投影中添加setter:

public interface VeryBasicProjection {
    String getTitle();
    String getUrl();
    void setTitle(String title);
    void setUrl(String url);
}

来源:https://github.com/spring-projects/spring-data-examples/blob/master/rest/projections/src/test/Java/example/springdata/rest/projections/simpleprojectiontests.Java

 类似资料:
  • 如果现在投胎,会出生在哪里? 项目根据最新的人口和出生率信息,计算出了出生在各个国家的概率,以地图的形式展现出来。 部署地址:https://uahh.site/reborn 数据来源 https://data.worldbank.org/indicator/SP.DYN.CBRT.IN https://data.worldbank.org/indicator/SP.POP.TOTL?end=20

  • 我正在为一个使用JOOQ库通过SQL进行查询的项目编写UT,我需要模拟SQL响应。 然而,我已经尝试遵循本手册,我们将JOOQ与纯SQL结合使用,这意味着我们没有任何预定义的字段或表类。 我的问题是-在不提供字段作为参数的情况下,如何定义结果对象?或者定义模拟字段参数? 我注意到我可以定义一个新字段,但字段实现的接口非常广泛,所以我正在寻找更简单的接口。 谢谢

  • SVG <feOffset> SVG的投影效果和CSS3的drop-shadow属性类似。 实例代码1 - 简单投影 代码解释 上述代码定义了1个矩形(rect)元素和2个滤镜元素feOffset和feBlend rect元素通过id(为f1)链接到滤镜feOffset,表示将产生一个在x和y方向上偏移(20px,20px)的投

  • MongoDB 中的投影即查询指定的字段,而不是直接查询文档的全部字段。比如说某个文档中有 5 个字段,而我们只需要其中的 3 个字段,那么就可以使用 MongoDB 中的投影来指定需要查询的 3 个字段。 在《 MongoDB查询文档》一节中我们介绍的 find() 方法,在使用 find() 方法时,如果不设置其中的第二个参数,那么在查询时将返回文档中的所有字段,想要限制要查询的字段,您就需要

  • 举个简单的例子来说明正交投影与透视投影照相机的区别。使用透视投影照相机获得的结果是类似人眼在真实世界中看到的有“近大远小”的效果(如下图中的(a));而使用正交投影照相机获得的结果就像我们在数学几何学课上老师教我们画的效果,对于在三维空间内平行的线,投影到二维空间中也一定是平行的(如下图中的(b))。 (a)透视投影,(b)正交投影 那么,你的程序需要正交投影还是透视投影的照相机呢? 一般说来,对

  • 当我尝试这个函数时,我得到一个错误。 CRSError:无效的投影: epsg: 4326:(内部程序错误:proj_create: SQLite错误对SELECT名称,类型,coordinate_system_auth_name,coordinate_system_code,datum_auth_name,datum_code,area_of_use_auth_name,area_of_use_