首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoraUI -使用customDataProvider作为输入和输出时的空指针异常

NoraUI -使用customDataProvider作为输入和输出时的空指针异常
EN

Stack Overflow用户
提问于 2017-08-16 10:50:51
回答 1查看 73关注 0票数 2

当我尝试使用CustomDataProvider作为输入和输出时,我遇到了问题。在场景的某个时候,NPE异常会被抛出。

编辑1 :我已经读过What is a NullPointerException, and how do I fix it?:我理解什么是NPE以及如何解决它。在我的案例中,我不理解的是为什么在执行的那一刻和在我的案例中有一个特定的对象发生。我不是NoraUI框架的专家。当我查看现有的dataProvider时,他们从不操作indexData对象,所以我也没有。我不知道它们是如何处理的,它们是什么时候初始化的。这就是为什么我要问的问题,为什么它发生在这个时刻,如果我忘记了一些东西,谁有更多的经验。如果不清楚的话很抱歉。这是一个与NoraUI框架相关的问题,而不是一个纯。

异常:

scenarioInitiator的执行与CustomDataProvider进行得很好:数据是在Gherkin上生成和编写的。但是,就在启动方案的开始时,会抛出异常:

代码语言:javascript
复制
[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)

通过对调试的进一步研究,引发异常的确切行似乎是noraui.exception.Result$Success对象的第一个构造函数中的for循环的条件:

代码语言:javascript
复制
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扩展的,而后者又由my customDataProvider扩展)。但我不明白为什么它会失败,因为在我的例子中,我使用了超级方法,就像其他普通的DataProvider (Excel、DB等)一样。

自定义数据提供程序:

我的自定义数据提供程序启动倍数查询,其中一些将根据第一个查询返回的内容进行修改。这些查询的最终结果存储在ArrayList<ArrayList<String>> dataTable变量中。数据的行如下:| Offer | Product | Items | Results |

,所以我的问题是:

为什么使用我的自定义数据提供程序抛出这个NPE,而与其他DataProvider,它没有。因为我没有看到他们中的任何一个都有处理DataIndex的自定义方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 13:11:37

您的问题似乎是因为代码的这一部分而发生的:

代码语言:javascript
复制
getIndexData(Context.getCurrentScenarioData()) 

getIndexData为当前检索的Context.getCurrentScenarioData()返回null;

如果您创建了一个DataInputProvider,您应该从CommonDataProvider扩展您的类并覆盖getModel()方法,如下所示:

代码语言:javascript
复制
/**
 * {@inheritDoc}
 */
@Override
public Class<Model> getModel(String modelPackages) throws TechnicalException {
    return null;
}

还应该通过返回用作输入的数据线数(包括列名行)来重新定义getNbLines()方法。

实际上,Context类中需要这两种方法来初始化用于写入结果的场景数据索引。

希望这能帮上忙

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45711568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档