2014-08-27 73 views
0

我有:在構造函數處注入MyClassString對象到Utils中。春季注射技巧

問題:

  1. 如何當utils的bean定義(看豆定義節)我只提了Utils構造函數的第二個參數是否可行?
  2. 如何在單元測試中將MyClass模擬轉換爲Utils對象?我的意思是如何重新定義bean定義?

Utils.java

public class Utils { 
    @Inject 
    public Utils(MyClass obj, String val) { 
     this.obj = obj; 
     this.val = val; 
    } 

豆類定義:

<bean class="com.mypack.MyClass"/> 

<bean id="utils" class="com.mypack.Utils"> 
    <constructor-arg value="bucket" /> 
</bean> 
+1

如果做單元測試只是做'新utils的(新MockMyClass (),「La-di-da」)'並且像老闆一樣測試。 – Bart 2014-08-27 16:53:42

+0

@將'Utils'放在另一個子項目中,所以我不能只將該對象作爲參數傳遞。我想我需要在我的單元測試中使用測試上下文,並重新定義那裏的'MyClass' bean – 2014-08-27 17:00:28

+0

@V_B你是完全正確的,你應該在測試上下文中重新定義bean(帶有「虛擬」行爲或其他)。 – ach 2014-08-27 17:48:51

回答

1

可以定義限定用於單元測試的另一個(測試)上下文:

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { "my-test-context.xml", 
             "some-other-context.xml" }) 
    public class SkipSampleFunctionalTests { 

     @Autowired 
     private SomeBean bean; 

    ... 
    } 

如果要覆蓋只有一個豆,你可以導入你的主要(核心)範圍內的int測試環境和改變只有所需的bean:

<import resource="main-context.xml"/> 
<bean id="x" class="com.asd.MyClass"> 
    <property name="y" ref="y"/> 
</bean>