10

In Jbehave we can execute method upon outcome of scenario success/failure. One of the below mentioned methods will execute after failure and success.

@AfterScenario(uponOutcome=AfterScenario.Outcome.SUCCESS)
public void afterSuccessfulScenario() {
// Some code to execute...
}

@AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE)
public void afterFailedScenario() {
// Some code to execute...
}

I'm trying to achieve the same thing in Cucumber-jvm. The scenario Hooks @Before and @After will execute after each scenario. But I want to execute some code for each failure scenario.

I am not sure how to implement it in cucumber-jvm. Any clue?

vkrams
  • 7,267
  • 17
  • 79
  • 129

1 Answers1

15

You can achieve it using cucumber-jvm hooks. If a hook receive a Scenario as a parameter, you can know if it has failed or not.

Example:

@After
public void afterScenario(Scenario scenario) {
  if (scenario.isFailed()) {
     // Some code to execute...
  }
  if(scenario.isPassed()) {
     // Some code to execute...
  }
}

Note the import of @After:

import cucumber.api.java.After;

Hope it helps.

vkrams
  • 7,267
  • 17
  • 79
  • 129
troig
  • 7,072
  • 4
  • 37
  • 63
  • 1
    can i get stack trace in @After? – vaibhavcool20 Oct 15 '17 at 09:41
  • @vaibhavcool20 Check [this question](https://stackoverflow.com/questions/42542557/how-to-get-the-exception-that-was-thrown-when-a-cucumber-test-failed-in-java/52117066#52117066). I think it solves what you want to achieve – troig Nov 30 '18 at 11:54