如何在 BeforeStep 黄瓜步骤定义中使用 Autowired

问题描述

当我在步骤定义的 NullPointerException 黄瓜方法中使用 @Autowired 时,我得到 @BeforeStep。我在这里做错了什么?

请在下面找到我的代码

RunTest.java

import io.cucumber.junit.platform.engine.Cucumber;

@Cucumber
public class RunTest {
}

CucumberSpringConfig.java

import io.cucumber.spring.CucumberContextConfiguration;
import org.springframework.boot.test.context.SpringBoottest;


@CucumberContextConfiguration
@SpringBoottest(classes = DemoApplication.class)
public class CucumberSpringConfig {
}

MyStepdefs.java

import io.cucumber.java.BeforeStep;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
    
    public class MyStepdefs {
            
        //@Autowired Environment environment;
        
        Environment environment;
        
        MyStepdefs(Environment environment) {
            this.environment = environment;
        }
            
    @BeforeStep
    public static void beforeStep() {
    System.out.println("beforeStep method");
    String path = environment.getProperty("spring.security.oauth2.token-uri");
    System.out.println("path: " +path);
    }
    }

pom.xml

<!-- cucumber plugins -->
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-java</artifactId>
                <version>6.6.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-junit</artifactId>
                <version>6.6.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-spring</artifactId>
                <version>6.6.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>datatable</artifactId>
                <version>3.4.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-junit-platform-engine</artifactId>
                <version>6.6.1</version>
                <scope>test</scope>
            </dependency>

例外:

步骤失败 java.lang.NullPointerException 在 com.demo.test.step.MyStepdefs.beforeStep(MyStepdefs.java:33)

解决方法

注解 @BeforeStep 步骤在静态方法上。这不适用于 @Autowired,因为静态方法独立于对象实例化,并且在实例化期间使用 @Autowired 进行 Spring 依赖注入。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...