I am trying to run a Cucumber
test with Spring Boot
and JUnit
.
However, I am getting following error when I right click an execute the TestRunner
class.
Am I missing any configuration?
Error:
cucumber.runtime.junit.UndefinedThrowable: The step "I feed my snake" is undefined
Feature: Snake Charmer
Scenario: Hearing your snake you anticipate sound # src/test/resources/features/first.feature:3
Given I have hungry snake # SnakeMeasureTest.i_have_hungry_snake()
When I feed my snake # null
Then I receive snek snek # SnakeMeasureTest.receive_snek_snek()
Undefined scenarios:
src/test/resources/features/first.feature:3 # Hearing your snake you anticipate sound
1 Scenarios (1 undefined)
3 Steps (1 skipped, 1 undefined, 1 passed)
0m1.378s
You can implement missing steps with the snippets below:
@When("I feed my snake")
public void i_feed_my_snake() {
// Write code here that turns the phrase above into concrete actions
throw new cucumber.api.PendingException();
}
SnakeMeasureTest.java
public class SnakeMeasureTest extends CucumberStepDefinitions {
@Autowired
SnakeController snake;
@Given("^I have hungry snake")
public void i_have_hungry_snake() {
assertEquals("hiss", snake.poke());
}
@When("^When I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
@Then("^I receive snek snek$")
public void receive_snek_snek() {
assertEquals("snek snek ^_^", snake.poke());
}
}
CucumberStepDefinitions.java
@RunWith(SpringRunner.class)
@SpringBootTest
public abstract class CucumberStepDefinitions {
}
TestRunner.java
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty"}, features = {"src/test/resources/features"})
public class TestRunner {
}
first.feature (src/test/resources/features)
Feature: Snake Charmer
Scenario: Hearing your snake you anticipate sound
Given I have hungry snake
When I feed my snake
Then I receive snek snek
SnakeController.java
@Controller
public class SnakeController {
private boolean fed;
@Autowired
public SnakeController() {
super();
}
public void feed() {
fed = true;
}
public String poke() {
if (this.fed == true) {
return "snek snek ^_^";
} else {
return "hiss";
}
}
}
You need to correct your step: From this:
@When("^When I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
To this:
@When("^I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
This issue is that you included the cucumber hook 'When' inside your @When annotation