Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@RunWith(Cucumber.class) and @Autowired MockMvc

I try to use MockMvc within Cucumber tests but no spring dependencies are resolved.

I've create this class :

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty", features = "src/test/resources/features"})
@SpringBootTest
public class CucumberTest {

}

to run cucumber feature

And this class for steps :

@WebMvcTest(VersionController.class)
@AutoConfigureWebMvc
public class VersionControllerSteps {

    @Autowired
    private MockMvc mvc;

    private MvcResult result;

    @When("^the client calls /version$")
    public void the_client_issues_GET_version() throws Throwable {
        result = mvc.perform(get("/version")).andDo(print()).andReturn();
    }

    @Then("^the client receives status code of (\\d+)$")
    public void the_client_receives_status_code_of(int statusCode) throws Throwable {
        assertThat(result.getResponse().getStatus()).isEqualTo(statusCode);
    }

    @And("^the client receives server version (.+)$")
    public void the_client_receives_server_version_body(String version) throws Throwable {
        assertThat(result.getResponse().getContentAsString()).isEqualTo(version);
    }
}

but this throw exception :

java.lang.NullPointerException
at com.example.rest.VersionControllerSteps.the_client_issues_GET_version(VersionControllerSteps.java:30)
at ✽.When the client calls /version(version.feature:8)

Here is the .feature :

Feature: the version can be retrieved

  As a api user
  I want to know which api version is exposed
  In order to be a good api user

  Scenario: client makes call to GET /version
    When the client calls /version
    Then the client receives status code of 200
    And the client receives server version 1.0

How to configure my test to use cucumber and spring-boot ?

Thanks in advance.

like image 912
jboz Avatar asked Mar 15 '17 23:03

jboz


1 Answers

Add @ContextConfiguration(classes = .class) Like below

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty", features = "src/test/resources/features"})
@SpringBootTest
@ContextConfiguration(classes = <SpringBootApplication>.class)
public class CucumberTest {

}

This will work. I faced the same issue and got solved with this fix.

like image 176
user2285688 Avatar answered Nov 11 '22 14:11

user2285688