Cucumber Kernel with Spring Boot Integration - Spring @ Activated Throws NullPointer Exception

I am writing cucumber-java tests for a Spring boot application testing every functionality. When I integrate with Spring boot, the @Autowired classes throw a NullPointer exception.

Spring boot class ,

@SpringBootApplication
public class SpringBootCucumberTest {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootCucumberTest.class, args);
    }
}

Class for testing ,

@Component
public class Library {

    private final List<BookVo> store = new ArrayList<BookVo>();

    public void addBook(final BookVo BookVo) {
        this.store.add(BookVo);
    }
}

Cucumber Unit Class ,

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

}

The class definition of cucumber ,

public class BookSearchSteps extends AbstractDefinition{

    @Autowired
    private Library library;

    private List<BookVo> result = new ArrayList<BookVo>();

    @Given(".+book with the title '(.+)', written by '(.+)', published in (.+)")
    public void addNewBook(final String title, final String author, @Format("dd MMMMM yyyy") final Date published) {
        BookVo book = new BookVo(title, author, published);
        library.addBook(book);
    }
 }

Spring integration with the cucumber class ,

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringBootCucumberTest.class, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest
public class AbstractDefinition {

    public AbstractDefinition() {
    }
}

It works by determining if a class in such a way ,

public class BookSearchSteps extends AbstractDefinition{

    private Library library = new Library();

    private List<BookVo> result = new ArrayList<BookVo>();

    @Given(".+book with the title '(.+)', written by '(.+)', published in (.+)")
    public void addNewBook(final String title, final String author, @Format("dd MMMMM yyyy") final Date published) {
        BookVo book = new BookVo(title, author, published);
        library.addBook(book);
    }
}

This does not work if the definition class is this way , throwing a NullPointer exception.

public class BookSearchSteps extends AbstractDefinition{

    @Autowired
    private Library library;

    private List<BookVo> result = new ArrayList<BookVo>();

    @Given(".+book with the title '(.+)', written by '(.+)', published in (.+)")
    public void addNewBook(final String title, final String author, @Format("dd MMMMM yyyy") final Date published) {
        BookVo book = new BookVo(title, author, published);
        library.addBook(book);
    }
}

@Autowired , Spring . springboot . , .

+4
1

-w760 maven.

<dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>1.2.4</version>
            <scope>test</scope>
        </dependency>

pom.xml spring,

<dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>1.2.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>1.2.4</version>
            <scope>test</scope>
        </dependency>

,

@ContextConfiguration(classes = SpringBootCucumberTest.class, loader = SpringApplicationContextLoader.class)
public class BookSearchSteps {

    @Autowired
    private Library library;

    private List<BookVo> result = new ArrayList<BookVo>();

    @Given(".+book with the title '(.+)', written by '(.+)', published in (.+)")
    public void addNewBook(final String title, final String author, @Format("dd MMMMM yyyy") final Date published) {
        BookVo book = new BookVo(title, author, published);
        library.addBook(book);
    }
}

@Autowired springboot. spring , .

+6

All Articles