1

我有以下jBehave故事/場景;jBehave NullPointerException for step方法

Scenario: some info validation 
When I enter the population as <global_target_pop> and submit 
Then I should see validation message <message> for <field> 

Examples: 
| field | global_target_pop | message | 
| targetPopulation | a1 | Population should be an Integer | 

相應的步驟方法如下;

@Then("Then I should see validation message <message> for <field>") 
    public void checkValidationMessageForField(String message, @Named("value") String reason, @Named("field") String fieldName) { 

    } 

但是,我得到NullPointerException這個特定的步驟。以下是堆棧跟蹤;

java.lang.NullPointerException 
    at org.jbehave.core.steps.StepCreator.parameterPosition(StepCreator.java:404) 
    at org.jbehave.core.steps.StepCreator.parameterForPosition(StepCreator.java:310) 
    at org.jbehave.core.steps.StepCreator.parameterValuesForStep(StepCreator.java:296) 
    at org.jbehave.core.steps.StepCreator.access$1000(StepCreator.java:36) 
    at org.jbehave.core.steps.StepCreator$ParametrisedStep.parametriseStep(StepCreator.java:639) 
    at org.jbehave.core.steps.StepCreator$ParametrisedStep.perform(StepCreator.java:592) 
    at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:535) 

什麼問題?

回答

0

給出明確的名稱將所有的參數在方法聲明:

public void checkValidationMessageForField(
    @Names("message") String message, 
    @Named("value") String reason, 
    @Named("field") String fieldName) { 
} 

如果表例子來參數化方案,即使用參數的<名稱>「語法步驟,然後在所有參數匹配的Java方法必須使用命名參數(@Named標註參數):

http://jbehave.org/reference/latest/parametrised-scenarios.html

一個重要的區別下在使用表格示例中的一行是 它們需要命名參數用於與步驟候選者匹配的 Java方法。命名參數允許使用具有相應標題名稱的表格行值來注入參數 ,而不是從註釋模式匹配中提取 。因此,的 步註釋模式必須保持逐字文本一步,如:

 @Given("a stock of <symbol> and a <threshold>") public void 
     aStock(@Named("symbol") String symbol, @Named("threshold") double 
     threshold) { 
        // ... } 

還有與「價值」參數的問題 - 它是用Java方法聲明一個@Named("value")註釋,但未出現在該方案中。
您需要將值分配給該參數,無論是在示例表,或使用場景元標記:

Examples: 
| field   | global_target_pop | message  | value  | 
| targetPopulation | a1    | Population... | some value | 

或:

Meta: 
@value some value 

Scenario: some info validation 
When I enter the population as <global_target_pop> and submit 
Then I should see validation message <message> for <field> 

Examples: 
| field | global_target_pop | message | 
| targetPopulation | a1 | Population should be an Integer |