【问题标题】:What can be unit tested in this Java method involving pagination of data?在这个涉及数据分页的 Java 方法中可以对什么进行单元测试?
【发布时间】:2023-03-08 21:34:01
【问题描述】:

单元测试初学者。以下是要测试的方法-

public ListBeneficiaryResponseDTO getBeneficiaryOfMerchants(Long merchantId, Integer page, Integer pageSize,
                                                       String sortDirection, String sortField) {
        LOGGER.info("Inside getBeneficiaryOfMerchants method");

        // default we are setting to added on desc sort
        Sort sort = Sort.by(Sort.Direction.DESC,"addedOn");
        if(sortField != null && sortDirection != null) {
            sort = Sort.by(Sort.Direction.fromString(sortDirection),sortField);
        }

        Pageable pageRequest = PageRequest.of(page-1, pageSize, sort);
        Page<Beneficiary> pageOfBeneficiaries = beneficiaryRepository.findAllByMerchantId(merchantId, pageRequest);

        List<BeneficiaryResponseDTO> benResonseDtoList = new ArrayList<BeneficiaryResponseDTO>();

        for( Beneficiary ben: pageOfBeneficiaries.getContent()) {
            benResonseDtoList.add(this.getBeneficiaryResponseDTO(ben));
        }
        ListBeneficiaryResponseDTO formattedListBen = new ListBeneficiaryResponseDTO(pageOfBeneficiaries.getTotalPages(),pageOfBeneficiaries.getTotalElements(),pageOfBeneficiaries.getNumber(),benResonseDtoList);
        return formattedListBen;
    }

为了编写测试,我想,鉴于底层方法调用工作正常,这个方法会做错什么。 好吧,我不确定,但将元素放入列表时可能会出现一些错误。

所以,我想编写一个测试来确保列表 benResonseDtoList 中存在预期数量的元素。

以下是我尝试过的 -

@Test
public void testGetBeneficiariesOfMerchant() throws Exception {

    Long merchantId = 2l;
    List<Beneficiary> beneficiaryList = new ArrayList<Beneficiary>();
    beneficiaryList.add(getBeneficiaryDto());
    beneficiaryList.add(getBeneficiaryDto());


    Page<Beneficiary> beneficiaries = new PageImpl<Beneficiary>(beneficiaryList); //But I am not sure how many entries are there in the page created.
Mockito.when(beneficiaryRepository.findAllByMerchantId(any(),any())).thenReturn(beneficiaries);
KeyManager keyManager = Mockito.mock(KeyManager.class);


ListBeneficiaryResponseDTO list = beneficiaryService.getBeneficiaryOfMerchants(merchantId,1,2, "DESC","addedOn");

如果 beneficiaryList 中的元素数量与 pageOfBeneficiaries 中的条目之间存在明显的相关性,我可以进行测试。

【问题讨论】:

  • 你的 getBeneficiaryDto() 方法返回什么?
  • “为了写测试,我想,这个方法会做错什么,” --- 这可能是寻找测试用例的错误方法。 UnitTests 验证 desiredpublic observable behavior 所以更好的问题是:当我输入这组数据时,预期的返回值是什么(如果有的话)以及它应该如何与其依赖项通信?我>
  • @ThudaniHettimulla 它返回一个受益人实体对象。
  • 在什么情况下所有底层方法都能正常工作?您还应该编写单元测试来处理“错误”场景。

标签: java unit-testing jpa pagination mockito


【解决方案1】:

如果我正确理解您的问题,您想知道getBeneficiaryOfMerchants() 函数的测试场景,因为下划线函数工作正常。

对于给定的

merchantId, page, pageSize, sortDirection, sortField

ListBeneficiaryResponseDTO 将被修复,我们将其称为 ListBeneficiaryResponseDTO expectedList(您必须构建它,因为您已经知道正确的输出)

所以您应该比较以下内容:-

实际输出:

ListBeneficiaryResponseDTO actualList =  beneficiaryService.getBeneficiaryOfMerchants(merchantId,1,2, "DESC","addedOn");

预期输出: ListBeneficiaryResponseDTO 预期列表(上面已经定义)

比较两个输出:-

  1. 逐字段比较 actualListexpectedList

  2. 覆盖 ListBeneficiaryResponseDTO 类的 Equals 方法(或者您可以使用 lombok.EqualsAndHashCode 来避免样板代码)并执行以下操作:- assertEquals(**actualList**, **expectedList**)

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 2012-05-30
    • 2019-05-02
    • 1970-01-01
    • 2018-02-11
    • 2012-12-11
    • 2014-06-27
    • 2012-01-11
    • 2022-01-06
    相关资源
    最近更新 更多