2016-07-25 142 views
2

使用自動裝配Autowired類屬性我有下面的類在我的春天啓動的應用程序春季啓動如何調用方法

public class ClassA { 

    @Autowired 
    PropertiesClass propertiesClass; 

    public Integer getMeSomeValue(Integer someParameter) { 
     // uses some methods of propertiesClass 
    } 
} 

這裏,propertiesClass實際上包含了從application.properties文件讀取屬性值的方法。我想單元測試getMeSomeValue方法。下面

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(MyApplication.class) 
@WebIntegrationTest 
public class ClassATest { 

    @Test 
    public void testGetMeSomeValue() { 
     ClassA classA = new ClassA(); 
     Assert.assertSame("Received expected response", classA.getMeSomeValue(6025), 2345); 
    } 
} 

我的單元測試類被給予當我運行單元測試,我在那裏propertiesClass的方法getMeSomeValue方法中調用點獲得空指針異常。 Spring引導中有沒有辦法使@Autowired工作?

+0

當你通過'new'手動實例化'ClassA'時,Spring IoC容器(app context)沒有機會注入你的'PropertiesClass' bean。考慮在你的測試配置中創建一個'ClassA' bean? – CollinD

回答

2

而不是

ClassA classA = new ClassA(); 

操作方法......

@Autowired 
ClassA classA; 

這樣CLASSA豆將內Spring容器可用。

1

在ClassA上調用新的構造函數不會注入您的有線PropertiesClass,因爲它不是由Spring創建的。

而是做

@Autowired 
ClassA classA; 

確保豆稱爲MyApplication.class,這將作爲您不使用組件掃描使它們可在上下文。