如何在 Spring Boot 和 JUnit 中执行 Cucumber 集成测试?
How to execute your Cucumber integration tests in Spring Boot and JUnit?
我正在尝试 运行 Cucumber
测试 Spring Boot
和 JUnit
。
但是,当我右键单击并执行 TestRunner
class.
时出现以下错误
我是否缺少任何配置?
错误:
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";
}
}
}
您需要更正您的步骤:
来自:
@When("^When I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
为此:
@When("^I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
这个问题是因为您在 @When 注释中包含了黄瓜钩子 'When'
我正在尝试 运行 Cucumber
测试 Spring Boot
和 JUnit
。
但是,当我右键单击并执行 TestRunner
class.
我是否缺少任何配置?
错误:
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";
}
}
}
您需要更正您的步骤: 来自:
@When("^When I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
为此:
@When("^I feed my snake$")
public void when_i_feed_my_snake() {
snake.feed();
}
这个问题是因为您在 @When 注释中包含了黄瓜钩子 'When'