Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring base package for component scan in Spring boot test

Tags:

When I launch my test with the following annotations:

package com.hello.package.p1;

@RunWith(SpringRunner.class)
@DataMongoTest
@SpringBootTest
public class ClassATest {

@Autowired
Service1 serivce1; //fqn = com.hello.package.p1.Service1 

@Autowired
Service2 serivce2; //fqn = com.hello.package.p2.Service2 

...}

package com.hello.package.p1;

@ActiveProfiles("test")
@SpringBootConfiguration
public class MongoTestConfig {
...
}

service1 will be injected. But service2 will not, since it is not in the same package as the test class. I get an error:

Unsatisfied dependency expressed through field 'service2'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException

How can I tell my testing context that I want to load/scan a certain package, for example com.hello?

like image 965
ElArbi Avatar asked Feb 12 '18 13:02

ElArbi


2 Answers

You can add a TestConfig class in your test package:

@Configuration
@ComponentScan({ "com.hello.package.p1", "com.hello.package.p2" })
public class TestConfig {
}
like image 81
Ortomala Lokni Avatar answered Sep 19 '22 15:09

Ortomala Lokni


Good to add the test config above I have the following in test config and any test case. I am new to spring boot test but it work. Let me know, if I am wrong.

    @Configuration
    @ComponentScan("au.some.spring.package")
    public class TestConfig {
    }
    @RunWith(SpringRunner.class)
    @EnableAutoConfiguration
    @SpringBootTest(classes= TestConfig.class)
    @TestPropertySource({"classpath:application.yml", 
    "classpath:env-${testing.env}.properties"})
    public class DBDmoTest {

        @Autowired
        PartyRepository partyRepository;
        @Test
        public void test(){
            Assert.assertNull(partyRepository.findByEmailIgnoreCase("[email protected]"));
        }
    }
like image 29
user2560347 Avatar answered Sep 19 '22 15:09

user2560347