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

发布于 2025-01-29 04:27:25 字数 1009 浏览 2 评论 0原文

在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());
    }
}

我尝试模拟entitymanager 使用@mock和stub通过mockito.when()。然后(),但据我所知,它不能像混凝土类中那样被模拟。那么,我应该如何模拟抽象类中的变量和方法呢?

In a Java (Spring Boot) app, I use JUnit and Mockito and want to test the following service method:

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

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

    // code omitted for brevity
}

The getDTOList method is in the following abstract class:

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());
    }
}

I tried to mock EntityManager using @Mock and stub via mockito.when().then(), but as far as I see, it cannot be mocked as in concrete classes. So, how should I mock the variables and methods in abstract class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幻想少年梦 2025-02-05 04:27:26

在我看来,当Mockito.时(CustomCriteriaqueries.Class)使用Mockito.Class,然后模拟您需要使用的任何方法。

@Test
public void testMethod(){
    CustomCriteriaQueries customCriteriaQueries = Mockito.when(CustomCriteriaQueries.class);
  
Assert.anyOperationYouNeed(customCriteriaQueries.getDTOList(this.buildEmployeeRequest));
}

In my opinion use Mockito.when(CustomCriteriaQueries.class), then mock any method that you need to use.

@Test
public void testMethod(){
    CustomCriteriaQueries customCriteriaQueries = Mockito.when(CustomCriteriaQueries.class);
  
Assert.anyOperationYouNeed(customCriteriaQueries.getDTOList(this.buildEmployeeRequest));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文