首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阶跃法的jBehave NullPointerException

阶跃法的jBehave NullPointerException
EN

Stack Overflow用户
提问于 2014-10-10 08:00:34
回答 1查看 795关注 0票数 1

我有下面的jBehave故事/场景;

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

相应的步进法如下;

代码语言:javascript
复制
@Then("Then I should see validation message <message> for <field>")
    public void checkValidationMessageForField(String message, @Named("value") String reason, @Named("field") String fieldName) {

    }

但是,对于这个特定的步骤,我将获得NullPointerException。下面是堆栈跟踪;

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

有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-11 09:06:45

为方法声明中的所有参数指定显式名称:

代码语言:javascript
复制
 public void checkValidationMessageForField(
     @Names("message") String message, 
     @Named("value") String reason, 
     @Named("field") String fieldName) {
 }

如果使用表示例将场景参数化,即步骤中使用“< name >”语法的参数,那么匹配的java方法中的所有参数都必须使用命名参数(带有@name注释的参数):

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

在使用表示例时要强调的一个重要区别是,它们需要命名参数才能使步骤候选项匹配到Java方法。命名参数允许使用具有相应标题名称的表行值注入参数,而不是从注释模式匹配中提取参数。因此,步骤注释模式必须包含逐字文本步骤,例如: @给定(“股票和")公共空aStock(@命名(”符号“)字符串符号,@命名(”阈值“)双阈值){ // .}

"value“参数也有一个问题--它是使用@Named("value")注释在java方法中声明的,但在场景中没有出现。

您需要在示例表中或在场景中使用元标记为该参数赋值:

代码语言:javascript
复制
Examples:
| field            | global_target_pop | message       | value      |
| targetPopulation | a1                | Population... | some value |

或者:

代码语言:javascript
复制
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 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26294569

复制
相关文章

相似问题

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