I’m stuck for 3 days an inch away from having it work, it’s really frustrating. I hope someone will be able to unblock me.
I’m building a standalone jar integrating the following libs:
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
My glue class looks like that:
package org.rtsl.dhis2.cucumber.definitions;
import io.cucumber.java.en.Given;
import io.cucumber.spring.CucumberContextConfiguration;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.util.concurrent.atomic.AtomicInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
@CucumberContextConfiguration
@ContextConfiguration("classpath:spring.main.xml")
public class Dhis2StepDefinitions {
private static final Logger LOGGER = LoggerFactory.getLogger(Dhis2StepDefinitions.class);
@Inject
@Named("testAtomicInt")
@Autowired
private AtomicInteger testCounter;
@Given("I have {int} cukes in my belly")
public void i_have_n_cukes_in_my_belly(int cukes) {
testCounter.addAndGet(cukes);
LOGGER.info("TEST: <{}> <{}> <{}>", cukes, testCounter, this);
}
}
You’ll notice that there are multiple annotations for injection. This is because none of them work.
My “spring.main.xml” for no just contains a single bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=removed_urls_to_make_the_spam_filter_happy
">
<bean id="testAtomicInt" class="java.util.concurrent.atomic.AtomicInteger" />
</beans>
I can’t rely on annotations only for my beans as we have an extensive framework of spring.xml resources that we can include to instantiate easily and simply a variety of objects like DB connection and more complex objects related to our applications.
I’m using the standard Main class of cucumber to launch my tests: io.cucumber.core.cli.Main
It seems to work fine as:
- It’s running tests and generate my reports
- It loads my spring.main.xml and instantiates my bean (DEBUG o.s.b.f.s.DefaultListableBeanFactory – Creating shared instance of singleton bean ‘testAtomicInt’)
Except that it’s not injecting anything.
Given I have 1 cukes in my belly # org.rtsl.dhis2.cucumber.definitions.Dhis2StepDefinitions.i_have_n_cukes_in_my_belly(int) java.lang.NullPointerException: Cannot invoke "java.util.concurrent.atomic.AtomicInteger.addAndGet(int)" because "this.testCounter" is null at org.rtsl.dhis2.cucumber.definitions.Dhis2StepDefinitions.i_have_n_cukes_in_my_belly(Dhis2StepDefinitions.java:27) at ✽.I have 1 cukes in my belly(file:///Users/ademarcq/repo/rtsl_utils/rtsl_util/CommonUtils/Dhis2CucumberTestTool/./src/test/resources/local_tests/scenarios/dummy.feature:7)
What did I do wrong ?
I tried any single annotation for injection. None worked.
Krohm is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.