Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring boot field injection with autowire not working in JUnit test

I want to inject DeMorgenArticleScraper in a test.

@RunWith(SpringJUnit4ClassRunner.class)
public class DeMorgenArticleScraperTest {

    @Autowired
    private DeMorgenArticleScraper deMorgenArticleScraper;

    ...
}

The DeMorgenArticleScraper component has some configuration going on for itself, but the IDE/compiler is not complaining about them.

@Component
public class DeMorgenArticleScraper extends NewsPaperArticleScraper {

    @Autowired
    public DeMorgenArticleScraper(
            @Qualifier("deMorgenSelectorContainer") SelectorContainer selector,
            GenericArticleScraper genericArticleScraper,
            @Qualifier("deMorgenCompany") Company company) {
        super(selector, genericArticleScraper, company);
    }

    ...
}

The constructor parameters that are annotated with @Qualifier, are defined in a Config.class With @Bean. The class itself has @Configuration. I figure the problem is not situated here.

The IDE warns me already, no bean found...autowired members must be defined in a bean. But as far as I know, it is defined in a bean with the @Component annotation. All other bean wiring seems ok as the Spring boot application can start (when I comment out the test class).

like image 570
progonkpa Avatar asked Nov 30 '22 15:11

progonkpa


1 Answers

I replaced

@RunWith(SpringJUnit4ClassRunner.class)

with

@SpringBootTest
@RunWith(SpringRunner.class)

This appears to be working fine: I see Spring boot firing up and loading beans. I'll keep this question open for a short while for better suggestions.

like image 55
progonkpa Avatar answered Dec 04 '22 02:12

progonkpa