NoraUI - 使用自定义数据提供程序作为输入和输出时出现空指针异常



当我尝试使用自定义数据提供程序作为输入和输出时,我遇到了问题。在方案中的某个时刻,将引发 NPE 异常。

编辑 1: 我已经阅读了什么是 NullPointerException,以及如何解决它?:我了解什么是 NPE 以及如何解决它。在我的案例中,我不明白的是为什么在执行的那一刻发生了一个,在我的案例中,这个特定的对象发生了。我不是NoraUI框架的专家。当我查看现有的dataProvider时,他们从不操作indexData对象,所以我也没有。我不知道它们是如何处理的,什么时候初始化的。这就是为什么我要问为什么它发生在此刻,以及我是否忘记了对有更多经验的人的事情。对不起,如果不清楚。这是一个与NoraUI框架更相关的问题,而不是一个纯粹的Java问题。

例外情况 :

场景发起器执行与自定义数据提供程序配合良好:数据生成并写入小黄瓜。但是就在场景启动开始时,抛出了异常:

[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循环的条件:

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;
}
}

我想它与在DataProvider Object中声明的IndexData有关(该对象由CustomDataProvider扩展,而CustomDataProvider又由我的自定义DataProvider扩展(。但我只是不明白为什么它会失败,因为在我的情况下,我使用了超级方法,就像其他常见的数据提供程序(Excel、DB 等(一样。

自定义数据提供程序:

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

所以我的问题是:

为什么使用我的自定义数据提供程序会引发此 NPE,而使用其他数据提供程序时,它不会。因为我没有看到他们中的任何一个具有处理数据索引的自定义方法。

您的问题似乎是由于这部分代码而发生的:

getIndexData(Context.getCurrentScenarioData()) 

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

;如果创建了 DataInputProvider,则应从CommonDataProvider扩展类并重写getModel()方法,如下所示:

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

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

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

希望这有帮助

最新更新