2017-06-27 71 views
0

我想在测试中注入DeMorgenArticleScraper。Spring引导字段注入与autowire不工作在JUnit测试

@RunWith(SpringJUnit4ClassRunner.class) 
public class DeMorgenArticleScraperTest { 

    @Autowired 
    private DeMorgenArticleScraper deMorgenArticleScraper; 

    ... 
} 

的DeMorgenArticleScraper组件有一些配置本身怎么回事,但IDE /编译器不会抱怨他们。

@Component 
public class DeMorgenArticleScraper extends NewsPaperArticleScraper { 

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

    ... 
} 

用@Qualifier注释的构造函数参数在Config.class中用@Bean定义。该类本身具有@Configuration。我认为问题不在这里。

IDE已经警告我,找不到bean ... autowired成员必须在bean中定义。但据我所知,它是用@Component注解在bean中定义的。所有其他bean接线似乎都可以,因为Spring启动应用程序可以启动(当我注释掉测试类时)。

+1

通过存储在谈到豆所需的相关@Configuration的,它应该是‘@InjectMocks’应该在DeMorgenArticleScraperTest去‘@Autowired’,而不是。我不记得在Junittest中有“@Autowired”加注 – drgn

+0

我在评论之后使用了测试的类注释,并发现了一些可行的方法。谢谢。 – progonkpa

+0

我建议你用堆栈溢出的解决方案回答你自己的问题!很高兴帮助 – drgn

回答

1

@SpringBootTest是相当重量级的,并且对于所有意图和目的都会加载您的整个应用程序https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications,它相当重量级并极大地影响测试时间。根据你想要测试的东西,你可能想看看

+0

现在我发现了我在找的东西。我阅读了ContextConfiguration注释,但是我错过了可以将Component注释类传递给它的事实。泰! – progonkpa

0

我更换

@RunWith(SpringJUnit4ClassRunner.class) 

@SpringBootTest 
@RunWith(SpringRunner.class) 

这似乎是做工精细:我看到春天启动发射了装载和豆类。我会在短时间内解决这个问题,以获得更好的建议。