在Cucumber-jvm中使用多个@Before时出现NullpointerException

时间:2013-07-11 10:12:08

标签: cucumber-jvm

我正在使用cucumber-jvm。

我有一个初始化所有必要内容的init方法,例如浏览器维度,应用程序URL等。 我已将此init方法放在@Before(cucumber.api)标记下。

    @Before
public void initLoginPage() throws Exception {
    getBrowserDimension();
    setBrowserCapabilities();
    init(getApplicationUrl());
}

这次运动顺利,我的生活很美好。 现在,我还想在场景级别使用@Before作为一些标签。 说我的方案如下:

@myTag
When I do blah
Then I should get blah-blah

我想使用类似的东西:

@Before(@myTag)
public void beforeScenario(){
  blah = true;
}

但是当我给它另一个@Before时,它开始给出一个NullPointerException。我在Cucumber的Runtime类中追溯到runBeforeHooks和runHookIfTagsMatch方法。 他们抛出了@Before(对于initLoginPage())本身的异常。 是否有多个@ Before的冲突? 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案让这个工作。 问题是任何@Before代码都是以随机顺序拾取的。它不是基于在@Before(“myTag”)之前执行没有参数的@Before的假设。

所以诀窍是为订单参数(在@Before中)分配一些值。分配给@Before的默认顺序是10000.因此,如果我们明确定义订单值,它应该有效。

基本上,我的初始化程序代码可能如下:

@Before(order=1)
public void initLoginPage() throws Exception {
  getBrowserDimension();
  setBrowserCapabilities();
  init(getApplicationUrl());
}

这解决了我的问题