Spring bean is not visible to cucumber spring test context

501 Views Asked by At

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

0

There are 0 best solutions below