在黄瓜步骤中自动装配字段会产生NullPointerException

时间:2018-07-18 17:35:56

标签: java spring-boot junit cucumber-jvm

黄瓜流道配置:

bfoob

功能文件:

@RunWith(Cucumber.class)
@CucumberOptions(features = "/features",glue {""})
@ContextConfiguration(classes = Init.class,
        initializers = ConfigFileApplicationContextInitializer.class)
public class Test {
}

步骤定义文件::

class feature {
  Scenario: Save test in db.
    When I inject a payload in the aws queue
    Then it should be integrated in database
}

我尝试在此处创建自定义注释,并在stepDefinition文件顶部使用此注释。 AbstractTest :::

@CucumberAbstract
@ContextConfiguration("classpath:application.yml")
public class MyStepdefs {

    @Autowired
    private QueueMessagingTemplate queueMessagingTemplate;

    @Autowired
    TestRepository testRepository;

    String message = "Hi";

    public MyStepdefs() {
        When("^I inject a payload in the aws queue$", () -> {
            this.queueMessagingTemplate.convertAndSend("QUEUE_NAME", message);
        });
    }

    @Then("^it should be integrated in database$")
    public void itShouldBeIntegratedInDatabase() throws Throwable {
        //validations
    }
}

2 个答案:

答案 0 :(得分:2)

黄瓜运行器(cucumber.api.junit.Cucumber)不会加载任何Spring上下文。
因此您的黄瓜步骤班不具备Spring知识。
要将bean注入类的字段中,必须加载Spring上下文,在本例中为Spring Boot上下文。

因此,您要寻找的是指定@SpringBootTest

@SpringBootTest
public class MyStepdefs {
  ...
}

答案 1 :(得分:0)

实际上,您需要将Cucumber与Spring Boot集成。 因此,您需要为Maven项目添加以下依赖项:

    <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.7.4</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>4.7.4</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>4.7.4</version>
        </dependency>

您的黄瓜赛跑者是一样的

@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty"}, features = {"src/main/resources"})
public class ReportCaseCucumberTest {
}

现在在StepDefinition类中,您需要配置ContextConfiguration才能使用Spring。

@SpringBootTest
@ContextConfiguration(
        classes = Application.class,
        loader = SpringBootContextLoader.class)
public class StepsDefinitions {

    @Autowired
    private ApplicationContext appContext;
}

现在在StepDefinition类中,您可以使用“自动装配”注解来注入bean。

这解决了我的问题,您也可以查看本教程: https://medium.com/@bcarunmail/set-up-and-run-cucumber-tests-in-spring-boot-application-d0c149d26220