NoraUI - исключение нулевого указателя при использовании customDataProvider в качестве входных и выходных данных

У меня есть проблема, когда я пытаюсь использовать CustomDataProvider в качестве ввода и вывода. В какой-то момент в сценарии выдается исключение NPE.

Изменить 1: Я уже прочитал Что такое исключение NullPointerException, и как я могу это исправить? Я понимаю, что такое NPE и как его решить. Что я не понимаю в моем случае, так это то, почему в этот момент происходит событие, и с этим конкретным объектом в моем случае. Я не эксперт по NoraUI Framework. Когда я смотрел на существующий dataProvider, они никогда не манипулировали объектом indexData, поэтому я тоже этого не делал. Я не знаю, как они обрабатываются и когда они инициализируются. Вот почему я задаю вопрос о том, почему это происходит в данный момент, и если я что-то забыл кому-то с большим опытом. Извините, если не было понятно. этот вопрос больше связан с NoraUI Framework, чем с чисто Java.

Исключение:

Выполнение sceneInitiator идет хорошо с CustomDataProvider: данные хорошо генерируются и пишутся на корнишоне. Но только в начале запуска сценария выдается исключение:

[2017-08-16 15:37:28]: ********************************************************************************************************
[2017-08-16 15:37:28]: *                                                                                                      *
[2017-08-16 15:37:28]: *   Scénario: [@scenario] étape 1 sur 0 avec 0 erreur(s) et 0 alerte(s). Il reste 0s   *
[2017-08-16 15:37:28]: *                                                                                                      *
[2017-08-16 15:37:28]: ********************************************************************************************************

Failed scenarios:
steps/scenarios/scenario.feature:4 # Scenario: scenario

1 Scenarios (1 failed)
28 Steps (28 skipped)
5m52.930s

java.lang.NullPointerException
    at noraui.exception.Result$Success.<init>(Result.java:32)
    at noraui.application.steps.CucumberHooks.setUpScenario(CucumberHooks.java:44)

После небольшого исследования отладки кажется, что точная строка, вызывающая исключение, является условием цикла for в первом конструкторе объекта noraui.exception.Result$Success:

public static class Success<O> extends Result {
        private final O object;
        private static final Logger logger = Logger.getLogger(Success.class.getName());

        public Success(O object, String message) throws TechnicalException {
            this.object = object;
            this.message = message;
            for (Integer i : Context.getDataInputProvider().getIndexData(Context.getCurrentScenarioData()).getIndexes()) {
                Context.getDataOutputProvider().writeSuccessResult(i);
            }
            logger.info(message + " [" + success() + "]");
        }

        public O success() {
            Optional<O> o = Optional.ofNullable(object);
            return o.isPresent() ? o.get() : null;
        }
    }

Я предполагаю, что это как-то связано с IndexData, объявленным в объекте DataProvider (который расширяется с помощью CustomDataProvider, который, в свою очередь, расширяется моим customDataProvider). Но я просто не понимаю, почему он потерпит неудачу, так как в моем случае я использовал метод super, как и другой обычный DataProvider (Excel, DB и т. Д.).

Пользовательский поставщик данных:

Мой пользовательский провайдер данных запускает несколько запросов, некоторые из которых изменяются в зависимости от того, что возвращает первый запрос. Окончательный результат этих запросов сохраняется в ArrayList<ArrayList<String>> dataTable переменная. строка данных следующая: | Offer | Product | Items | Results |

Итак, мой вопрос:

Почему при использовании моего пользовательского поставщика данных этот NPE выбрасывается, а с другим DataProvider - нет. Поскольку я не вижу ни одного из них, имеющих собственный способ обработки DataIndex.

1 ответ

Решение

Ваша проблема, кажется, возникает из-за этой части кода:

getIndexData(Context.getCurrentScenarioData()) 

getIndexData возвращает значение null для текущего полученного Context.getCurrentScenarioData();

Если вы создали DataInputProvider, вы должны расширить свой класс с CommonDataProvider и переопределить getModel() метод следующим образом:

/**
 * {@inheritDoc}
 */
@Override
public Class<Model> getModel(String modelPackages) throws TechnicalException {
    return null;
}

getNbLines() Метод также должен быть переопределен путем возврата количества строк данных, используемых в качестве входных данных (включая строку имен столбцов).

На самом деле, эти два метода необходимы в Context класс для инициализации индексов данных сценариев, которые используются для записи результатов.

Надеюсь, что это помогает

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