2013-07-11 4 views
0

Я использую огурец-jvm.NullpointerException при использовании нескольких @Before в Cucumber-jvm

У меня есть метод init для инициализации всех необходимых материалов, таких как размеры браузера, URL-адрес приложения и т. Д. Я поместил этот метод init под тегом @Before (cucumber.api).

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

В моей жизни все в порядке с этим плавным ходом. Теперь я также хотел использовать @Before для некоторых тегов на уровнях сценариев. Say мой сценарий выглядит следующим образом:

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

И я хотел бы использовать что-то вроде:

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

Но в тот момент я даю ему еще @Before, он начинает давать NullPointerException. Я отследил его обратно к методам runBeforeHooks и runHookIfTagsMatch в классе Runtime Cucumber. Они бросают исключение для @Before (для initLoginPage()). Есть ли конфликт, созданный с несколькими @ Before? Как я могу это решить?

ответ

1

Я нашел решение для этого. Проблема заключалась в том, что любой из кодов @Before собирался в случайном порядке. Он не основывался на предположении, что перед @Before («myTag») будет выполняться функция @Before без параметров.

Итак, трюк заключается в том, чтобы присвоить параметр порядка (в @Before) некоторого значения. Заказ по умолчанию, присвоенный @Before, равен 10000. Таким образом, если мы определяем значение порядка явно, оно должно работать.

Так в основном, мой код для инициализатора может выглядеть следующим образом:

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

Это решило мою проблему