Junit.framework.AssertionFailedError и отсутствие запускаемых методов из-за пробелов

Когда я делаю это, я получаю junit.framework.AssertionFailedError:

assertEquals("123 \t July \t testuser \t USD \t one two \t pnl \t ACTUALS_STAGE \t product_line \t pnl", tabs );

Ошибка:

expected:<123[   July    testuser    USD     one two     pnl     ACTUALS_STAGE   product_line    ]pnl>
but was:<123[   July    testuser    USD one two pnl ACTUALS_STAGE   product_line    ]pnl>

"tabs" получает параметры, разделенные табуляцией, от тестируемой функции. Утверждение не выполняется из-за проблемы с пробелами. Между значениями вместе с табуляцией добавляются пробелы.

Код теста:

@Before
    public void setUp() throws Exception {
        List<String> list = Arrays.asList("one", "two");
        List<String> scenarioList = Arrays.asList("ACTUALS_STAGE");
        List<Map<String, List<String>>> filter = new ArrayList<>();
        Map<String, List<String>> filtersMap = new HashMap<>();
        List<String> filterList = Arrays.asList("A1PCON");
        filtersMap.put("product_line", filterList);
        filter.add(filtersMap);

        reportQueryParams = ReportQueryParams.builder()
                .id("123").currency("USD").companies(list).cognosDatasetType("pnl").scenarios(scenarioList)
                .filters(filter).reportTemplate("pnl")
                .build();
    }

    @Test
    public void tabSerializerTest() {
        String remoteUser = "testuser";
        HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class);
        Mockito.when(httpServletRequest.getRemoteUser())
               .thenReturn(remoteUser);
        MetricsSerializer metricsSerializer = new MetricsSerializer();
        String tabs = metricsSerializer.serializeMetrics(reportQueryParams, httpServletRequest);
        assertEquals("123 \t July \t testuser \t USD \t one two \t pnl \t ACTUALS_STAGE \t product_line \t pnl", tabs );
    }

Например:

abc \ t pqr: это отобразит первое значение, добавит пробел, добавит табуляцию, добавит пробел, а затем отобразит второе значение.

Ожидается: abc \ tpqr

Если я сделаю «abc \ tpqr», я получаю следующую ошибку:

No runnable method found.

Я аннотировал его с помощью @Test, и он работает, если я сделаю "abc \ t pqr"

Я также пробовал делать "abc" + "\ t" "pqr", но он дает тот же запускаемый файл, который не найден (ошибка инициализации).

Как я могу справиться с этим, чтобы исправить ошибку утверждения и ошибку выполнения? Мне просто нужно пространство табуляции между значениями.

Добавьте соответствующие части вашего метода тестирования.

Darren Forsythe 31.07.2018 00:49

@DarrenForsythe - Отредактировал вопрос!

Tee Jay 31.07.2018 00:52

Второй вопрос: действительно ли вам важны пробелы или это просто раздражает тестируемые данные?

Darren Forsythe 31.07.2018 00:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
127
1

Ответы 1

Вам действительно нужно проверять табуляцию и пробелы? Если нет, то передайте результат строки в новый метод, который исправит проблему с интервалом. Или вы можете просто вернуть массив значений, игнорируя пробелы, как показано ниже.

public static String[] getValues(String input){
  //tokenize 
  String[] values = input.split("\\s+");  
  return values;    

}

Затем вы можете использовать Утверждение для сравнения массивов ожидаемых и фактических.

Другие вопросы по теме