2017-06-27 85 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) 

這似乎是做工精細:我看到春天啓動發射了裝載和豆類。我會在短時間內解決這個問題,以獲得更好的建議。