Издевательство над ArrayList с помощью PwerMock

я пытаюсь издеваться над массивом следующим образом, используя Powermock

Класс МокДао

 PowerMockito.mockStatic(DailyReceiptsAndExceptionsDetailsDao.class);
    PowerMockito.mockStatic(UtilityFunctions.class);
    DailyReceiptsAndExceptionsExport dailyExceptionsExport = Mockito.mock(DailyReceiptsAndExceptionsExport.class);
    List<DailyReceiptsAndExceptionsDetailsGridDto> resultList = getDailyExceptions(inputDto);
    try{
        PowerMockito.whenNew(DailyReceiptsAndExceptionsExport.class).withArguments(Mockito.any(DailyReceiptsAndExceptionsDetailsInputDto.class)).thenReturn(dailyExceptionsExport);
        Mockito.when(DailyReceiptsAndExceptionsDetailsDao.getDailyReceiptsAndExceptions(Mockito.any(DailyReceiptsAndExceptionsDetailsInputDto.class))).thenReturn(resultList);
        Mockito.when(UtilityFunctions.processReportSchedule(scheduleId, jobId,dailyExceptionsExport,(List<DailyReceiptsAndExceptionResultDTO>)Mockito.any(), null, null)).thenReturn(true);
}catch(Exception e){
    }

Мне нужно написать тесты для следующего класса.

    public static Response getOutboundAvgCubeAndWeightUtilization(
        @QueryParam("dc") String dc,
        @QueryParam("asn") String asn,
        @QueryParam("sortBy") String sort,
        @QueryParam("isExport") boolean isExport,
        @QueryParam("fileType") String fileType,
        @QueryParam("scheduleId") BigDecimal scheduleId,
        @QueryParam("jobId") BigDecimal jobId)  {

    ResponseDTO responseDto = new ResponseDTO();

    DailyReceiptsAndExceptionsDetailsInputDto inputDto = new DailyReceiptsAndExceptionsDetailsInputDto ();
    inputDto.setAsn(asn);
    inputDto.setDc(dc);
    inputDto.setSortBy(sort);
    inputDto.setFileType(fileType);
    inputDto.setExport(isExport);
    String filePath = "";
    try {
        DailyReceiptsAndExceptionResultDTO resultDto = DailyReceiptsAndExceptionsDetailsBusinessManager.getInstance().manageDailyReceiptsAndExceptionsDetails(inputDto);
        List<DailyReceiptsAndExceptionResultDTO> resultsList = new ArrayList<DailyReceiptsAndExceptionResultDTO>();
        resultsList.add(resultDto);
        if(scheduleId != null) {
            boolean responseStatus = UtilityFunctions.processReportSchedule(scheduleId, jobId, new DailyReceiptsAndExceptionsExport(inputDto), resultsList, null,null);

            responseDto.setResult(Boolean.toString(responseStatus));

            return CommonUtil.convertResponseToJson(responseDto);
        } 
   }

Мой класс тестов выглядит следующим образом.

   @Test
public void testGetOutboundAvgCubeAndWeightUtilization_4()
    throws Exception {
    String dc = "5854";
    String asn = "*";
    String sort = "SKU";
    boolean isExport = false;
    String fileType = "";
    BigDecimal scheduleId = new BigDecimal(100);
    BigDecimal jobId = new BigDecimal(100);
    DailyReceiptsAndExceptionsDetailsInputDto inputDto = new DailyReceiptsAndExceptionsDetailsInputDto ();
    inputDto.setAsn(asn);
    inputDto.setDc(dc);
    inputDto.setSortBy(sort);
    inputDto.setFileType(fileType);
    inputDto.setExport(isExport);
    DailyReceiptsAndExceptionsDetailsMockDAO.mockgetDailyExceptions(inputDto, scheduleId, jobId);
    Response result = DailyReceiptsAndExceptionsDetailsService.getOutboundAvgCubeAndWeightUtilization(dc, asn, sort, isExport, fileType, scheduleId, jobId);
    String output = result.getEntity().toString();      
    assertEquals(true,output.contains("\"result\": \"true\""));
}

когда я запускал тестовый пример, он выдавал ошибку, потому что я думаю, что насмешка над списком неверна.

Может ли кто-нибудь сказать, как запустить этот тестовый сценарий....


person Srinivas B    schedule 20.09.2013    source источник
comment
Пожалуйста, не могли бы вы добавить трассировку стека ошибки.   -  person Stefan Birkner    schedule 20.09.2013
comment
@StefanBirkner Я получаю следующую трассировку ошибки, java.lang.AssertionError: ожидаемо: «true», но было: «false» в org.junit.Assert.fail(Assert.java:88) в org.junit.Assert.failNotEquals (Assert.java:743) в org.junit.Assert.assertEquals(Assert.java:118) в org.junit.Assert.assertEquals(Assert.java:144)   -  person Srinivas B    schedule 20.09.2013
comment
Название кажется немного вводящим в заблуждение, поскольку я нигде не могу найти определение издевательского списка. Не могли бы вы уточнить, чего вы пытаетесь достичь, потому что я почему-то подозреваю, что вы пытаетесь издеваться над следующим вызовом: UtilityFunctions.processReportSchedule(scheduleId, jobId, new DailyReceiptsAndExceptionsExport(inputDto), resultsList, null,null);   -  person Morfic    schedule 25.09.2013


Ответы (2)


Ваши издевательства, кажется, в порядке.

JUnit не проходит тест, потому что строка

assertEquals(true,output.contains("\"result\": \"true\""));

терпит неудачу: это означает, что ваша строка output не содержит текста "result": "true"

Возможно, один из способов выяснить, что не так, — либо распечатать значение вывода до вызова assertEquals(), либо использовать отладчик, чтобы узнать, что такое значение вывода.

Кстати, assertEquals(true, <condition>) очень многословен, вместо него можно использовать assertTrue(<condition>).

person dkatzel    schedule 26.09.2013

Согласно вашему комментарию, тест просто не проходит. (AssertionErrors — это способ JUnit сказать, что ваш тест не пройден.)

Вы можете получить лучшее сообщение об ошибке, если используете Hamcrest. Поэтому вам нужно изменить последние две строки вашего кода:

assertThat(result.getEntity(), hasToString(containsString("\"result\": \"true\"")));

Добавьте статический импорт для org.hamcrest.MatcherAssert.assertThat и org.hamcrest.Matchers.*.

Новое сообщение об ошибке может помочь вам найти ошибку.

person Stefan Birkner    schedule 25.09.2013