Что можно протестировать в этом методе Java, включающем разбиение данных на страницы? - PullRequest
0 голосов
/ 09 мая 2020

Новичок в модульном тестировании. Ниже приведен метод, который нужно протестировать:

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, я мог бы это проверить.

1 Ответ

0 голосов
/ 09 мая 2020

Если я правильно понял ваш вопрос, вы хотите знать сценарий тестирования ios для getBeneficiaryOfMerchants() функции, указанные функции подчеркивания работают правильно.

Для данного

merchantId , page, pageSize, sortDirection, sortField

ListBeneficiaryResponseDTO будет исправлено, давайте назовем этот ListBeneficiaryResponseDTO expectedList (вы должны создать его, поскольку вы уже знаете правильный результат)

Таким образом, вы должны сравнивать следующее: -

Фактический выход:

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

Ожидаемый результат: ListBeneficiaryResponseDTO ожидаемый список (уже определен выше)

Сравнение обоих выходных данных: -

  1. Сравнить поле по полю фактический список & ожидаемый список

  2. Переопределите метод Equals класса ListBeneficiaryResponseDTO (или вы можете использовать lombok.EqualsAndHashCode, чтобы избежать шаблонного кода) и выполните следующие действия: - assertEquals(**actualList**, **expectedList**)

...