2017-08-16 18 views
2

我嘗試使用CustomDataProvider作爲輸入和輸出時遇到問題。在場景中的某個時刻,會引發NPE異常。NoraUI - 使用customDataProvider作爲輸入和輸出時的空指針異常

編輯1:我已經閱讀What is a NullPointerException, and how do I fix it?:我明白什麼是NPE以及如何解決它。在我的情況下,我不明白爲什麼在執行的那一刻發生了一件事情,並且在我的情況下有這個特定對象。我不是NoraUI框架的專家。當我查看現有的dataProvider時,他們從不操縱indexData對象,所以我也沒有。我不知道它們是如何處理的以及它們是什麼時候初始化的。這就是爲什麼我問這個時候爲什麼會發生這樣的問題,以及我是否忘記了一些有更多經驗的人。對不起,如果不明確。與純粹的Java相比,這是一個與NoraUI框架更相關的問題。

除外:

的scenarioInitiator執行與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) 

隨着一點點更多的研究與調試,似乎被激怒的異常準確的線是爲條件在noraui.exception.Result $成功對象的第一個構造循環

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擴展)。但我不明白爲什麼它會失敗,因爲在我的情況下,我使用超級方法,就像另一個常見的DataProvider(Excel,DB等)。

自定義數據提供:

我的自定義數據提供商推出的倍數查詢與根據第一查詢什麼樣的回報一些被修改。這些查詢的最終結果存儲在ArrayList<ArrayList<String>> dataTable變量中。數據的行如下:| Offer | Product | Items | Results |

所以我的問題是:

爲什麼使用我的自定義數據提供者拋出這個NPE同時與其他的DataProvider不,事實並非如此。因爲我沒有看到它們中的任何一個具有處理DataIndex的自定義方式。

+0

的可能的複製[什麼是空指針異常,以及如何解決?(https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-如何做 - 我 - 修復它) –

+0

@AMALlal,沒有重複的職位,是否具體到NoraUi。 – sgrillon

回答

2

您的問題似乎是因爲這部分代碼的發生:

getIndexData(Context.getCurrentScenarioData()) 

getIndexData當前檢索上下文返回null。getCurrentScenarioData();

如果創建了DataInputProvider,則應該從CommonDataProvider延伸您的類並覆蓋getModel()方法如下:

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

getNbLines()方法應還可以通過返回的用作輸入數據線的數量重新定義(包括列名行)。

實際上,Context類需要這兩個方法來初始化用於寫入結果的場景數據索引。

希望這有助於

+0

非常感謝,過濾getModel()方法解決了這個問題。由於我沒有在我的項目中使用模型,我不認爲我與這個模型有任何關係。 我也在getNbLines()方法中犯了錯誤,我返回了沒有列名行的數據行數。 –