I am setting up integration tests using Cucumber and Spring, the tests are failing to run because of the unsatisfied dependency expressed through the field 'policiesRepository'. I have added the PoliciesRepository.class in my @SpringBootTest annotation in the "SpringIntegrationTest.class" config class.
My SpringIntegrationTest.class:
package net.foursure.platform.api.sil.steps;
import io.cucumber.spring.CucumberContextConfiguration;
import org.junit.Before;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
@CucumberContextConfiguration
@SpringBootTest(classes = {com.maven.sim.repository.PoliciesRepository.class})
@ComponentScan(basePackages = {"com.maven.sim", "net.foursure.platform"})
public class SpringIntegrationAPITest {
@Before
public void setUp() {
System.out.printf("-------------- Spring Context Initialized For Executing Cucumber Tests --------------");
}
}
My cucumber test nunner:
package net.foursure.platform.ui.sil.runner;
import io.cucumber.java.After;
import io.cucumber.java.Before;
import io.cucumber.java.Scenario;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
import net.foursure.platform.ui.sil.utils.Utils;
import org.openqa.selenium.TakesScreenshot;
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.DataProvider;
@CucumberOptions(
features = "src/test/java/resources/features/ui/SIL",
snippets= CucumberOptions.SnippetType.CAMELCASE,
glue={"net.foursure.platform.ui.sil.steps", "net.foursure.platform.ui.sil.hooks", "net.foursure.platform.api.sil.steps","com.maven.sim.repository"},
publish = false,
plugin = { "pretty","com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:" }
)
public class TestRunner extends AbstractTestNGCucumberTests {
@Override
@DataProvider
public Object[][] scenarios() {
return super.scenarios();
}
}
My repository Interface:
package com.maven.sim.repository;
import com.maven.sim.entities.claims.Policies;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface PoliciesRepository extends JpaRepository<Policies, Integer> {
Optional<Policies> findById(Integer id);
}
My understanding is that this is all the necessary configuration for Cucumber and Spring integration, however when I run the runner I get the exception that policiesRepository is an unsatisfied dependency. Kindly assist.
The Exception:
Scenario: Get the list of policy numbers # src/test/java/resources/features/ui/SIL/CreateSilClaim_UI.feature:3
* Get policies for partner "SIL_DEV" using "get_policies" # net.foursure.platform.api.sil.steps.MyStepdefs.getPoliciesForPartnerUsing(java.lang.String,java.lang.String)
io.cucumber.core.exception.CucumberException: Could not invoke step [Get policies for partner {string} using {string}] defined at 'net.foursure.platform.api.sil.steps.MyStepdefs.getPoliciesForPartnerUsing(java.lang.String,java.lang.String)'.
It appears there was a problem with the step definition.
The converted arguments types were (java.lang.String, java.lang.String)
at io.cucumber.core.runner.PickleStepDefinitionMatch.couldNotInvokeStep(PickleStepDefinitionMatch.java:130)
at io.cucumber.core.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:65)
at io.cucumber.core.runner.ExecutionMode$1.execute(ExecutionMode.java:10)
at io.cucumber.core.runner.TestStep.executeStep(TestStep.java:84)
at io.cucumber.core.runner.TestStep.run(TestStep.java:56)
...
Caused by: io.cucumber.core.backend.CucumberBackendException: Error creating bean with name 'net.foursure.platform.api.sil.steps.MyStepdefs': Unsatisfied dependency expressed through field 'policiesRepository': No qualifying bean of type 'com.maven.sim.repository.PoliciesRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at io.cucumber.spring.SpringFactory.getInstance(SpringFactory.java:137)
at io.cucumber.java.AbstractGlueDefinition.invokeMethod(AbstractGlueDefinition.java:47)
at io.cucumber.java.JavaStepDefinition.execute(JavaStepDefinition.java:29)
at io.cucumber.core.runner.CoreStepDefinition.execute(CoreStepDefinition.java:66)
at io.cucumber.core.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:63)
... 37 more
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'net.foursure.platform.api.sil.steps.MyStepdefs': Unsatisfied dependency expressed through field 'policiesRepository': No qualifying bean of type 'com.maven.sim.repository.PoliciesRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:714)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:694)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:483)
Your help is most welcome and much appreciated.
Thanks in advance, Sandile