2015-11-27 21 views
0

我必須創建一個具有自動佈線元素的類的實例以供測試。使用自動電線創建呼叫的實例

public class MyClass extends SomeOtherClass { 
    @Autowired 
    public MyClass(OtherClass1 one, OtherClass2 two){ 
     super(one, two) 
    } 
} 

我該如何在代碼中創建此類的實例,使用參數雖然在春天連線?

回答

-1

而不是將其他元素作爲構造函數參數傳遞,而是將其作爲屬性自動裝入。 Spring會注入對象。

public class MyClass extends SomeOtherClass { 

    @Autowired 
    private OtherClass1 one; 

    @Autowired 
    private OtherClass2 two 

    public MyClass(){ 
     super(one, two) 
    } 
} 

編輯:基於http://www.mkyong.com/spring/spring-auto-wiring-beans-with-autowired-annotation/,增加@Autowired到構造也是有效的。

如果您想自動填充MyClass,則必須使用@Component或類似的@Service註釋對其進行註釋。

@Component 
public class MyClass extends SomeOtherClass 

然後,如果您使用SpringJUnit4ClassRunner在Spring上下文來讀取測試中使用,你可以用它在其他類

public class ClassThatUsesMyClass { 
    @Autowire 
    private MyClass myClass; 
} 
+0

對不起,我應該說我不能改變類 – Androme

+0

這應該是可能的,通過在application-context.xml中定義bean。不幸的是,我沒有太多的經驗,但http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html應該給你一個體面的參考如何開始。具體來說,查看屬性註釋的「ref」字段。 –

0

您的測試可以由Spring的。例如:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"the-config.xml"}) 
public final class MyClassTests { 
    @Autowired 
    private MyClass testee; 

    @Test 
    public void testSomething() { 
     assertThat(testee).doesSomethingExpected(); 
    } 
} 

請注意,您應該重用盡可能多的生產配置成爲可能,而不是建立一個平行的Spring上下文配置,反映它。