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

如何在抽象类中模拟变量和方法?

殷烨
2023-03-14

在Java(Spring Boot)应用程序中,我使用JUnit和Mockito,并想测试以下服务方法:

public Page<EmployeeDTO> findAll(EmployeeRequest request, final Sort sort) {
    

    final List<EmployeeDTO> list = getDTOList(request);

    // code omitted for brevity
}

getDTOList方法在以下抽象类中:

public abstract class CustomCriteriaQueries {

    private EntityManager entityManager;

    protected void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    protected List<D> getDTOList(EmployeeRequest request) {

        final CriteriaBuilder cb = entityManager.getCriteriaBuilder();

        // code omitted

        return entityManager
                .createQuery(cq)
                .stream()
                .collect(Collectors.toList());
    }
}

我尝试使用@mock和stub通过mockito模拟EntityManager。when()。然后(),但在我看来,它不能像在具体的类中那样被模拟。那么,我应该如何模拟抽象类中的变量和方法呢?

共有1个答案

薛烨霖
2023-03-14

在我看来,使用Mockito.when(CustomCriteriaQueries.class),然后模拟您需要使用的任何方法。

@Test
public void testMethod(){
    CustomCriteriaQueries customCriteriaQueries = Mockito.when(CustomCriteriaQueries.class);
  
Assert.anyOperationYouNeed(customCriteriaQueries.getDTOList(this.buildEmployeeRequest));
}
 类似资料:
  • 下面是抽象类的代码: 现在,我应该如何为编写单元测试,并且应该如何在中模拟会话? 我在Stackoverflow上尝试了不同的解决方案,但仍然无法模拟它并获得会话模拟。

  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 问题内容: 考虑以下(简化的)枚举: 可以在以下函数中使用它: 我现在想为此编写一个单元测试,以模拟每个枚举实例中对myMethod()的调用。我尝试了以下方法: 但是,真正的实现和正在调用。 我做错了什么? 问题答案: 枚举中的每个常量都是一个静态的最终嵌套类。因此,要模拟它,您必须在PrepareForTest中指向嵌套类。 返回预初始化的数组,因此在您的情况下也应进行模拟。 每个枚举常量都只

  • 本文向大家介绍php中的抽象方法和抽象类,包括了php中的抽象方法和抽象类的使用技巧和注意事项,需要的朋友参考一下 1、什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法。所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方法还要加一个关键字"abstract"来修饰。 例如: 2、什么是抽象类? 只要一个类里面

  • 如何使用Mockito或PowerMock模拟一个由子类实现,但从抽象超类继承的受保护方法? 换句话说,我想测试“DoSomething”方法,同时嘲弄“DoSomethingElse”。 抽象超类 子类实现 解决方案 这里给出的答案是正确的,如果涉及的类是在同一包中,将会起作用。 但如果涉及不同的包,一个选择是使用PowerMock。下面的例子对我有效。当然可能有其他的方法,这是一个可行的。 注

  • 问题内容: 我希望能够将go应用程序发出的每次写入/读取记录到底层操作系统,并且(如果可能)将FS完全替换为仅驻留在内存中的FS。 可能吗?怎么样?也许有一个现成的解决方案? 问题答案: 这直接是您(可能)不了解Go的 Andrew Gerrand的10件事: 为此,您需要编写代码以接受参数(也许将其嵌入其他类型,或者表示默认文件系统)。