2011-08-11 31 views
1

我想測試一個類像嘲諷配置值測試使用的彈簧

@Controller 
public class FailureController { 

    @Value("#{configValues.defaultRedirectUrl}") 
    private String defaultRedirectUrl; 
public FailureController (String defaultRedirectUrl) { 
this.defaultRedirectUrl = defaultRedirectUrl; 
} 
... 

的問題是,我不能沒有測試類創建一個特殊的構造測試這個類(如上面)類時,它最終將初始化中的defaultRedirectUrl

如何在測試過程中無需創建構造函數(即將來自spring上下文)來測試它。我的主要目標是在運行測試時在沒有構造函數的情況下初始化FailureController中的值。

是否有可能以某種方式Spring上下文測試期間被加載和初始化在FailureController 領域這是我一直在做,但它不工作,defaultRedirectUrl保持FailureControllernull

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/applicationContext-test.xml" }) 
public class FailureControllerTest { 
    @Autowired 
    FailureController failureController; 

的applicationContext-的test.xml

... 
     <bean id="failureController" class="se.synergica.watchtower.controllers.FailureController"> 
     </bean> 

     <import resource="spring-config-test.xml" /> 
    </beans> 

謝謝。 al

回答

0

我會在test-classpath(標準項目中的src/test/resources)中創建一個單獨的applicationContext.xml文件。在那裏我會設置一個帶虛擬值的configValues對象。 在這種情況下,你的班級也應該立即實施。

然後加載這樣的測試上下文在JUnit測試:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("/applicationContext-test.xml") 
public class MyTest { 

    @Autowired 
    private AClassToBeTest subject; 

    //...perform test on subject 
} 

更多彈簧試驗:http://static.springsource.org/spring/docs/3.0.x/reference/testing.html

+0

謝謝你,我想,我不明白你的意思...... AClassToBeTest中的Url字段會被初始化嗎?我猜這不會。不是@ContextConfiguration用於僅爲測試加載上下文即AClassToBeTestTest,而不是用於正在測試的類即AClassToBeTest?我已經編輯了一些我的問題。 – Deam

+0

重點在於你有一個由測試應用程序上下文實例化的AClassToBeTest。所以應該在applicationContext-test.xml中定義AClassToBeTest。你將這個實例注入到你的單元測試中,它應該像在正常運行時一樣被初始化。與運行時唯一不同的是,您可以使用不同的彈簧上下文,您可以在其中加載用於測試值的不同屬性文件或類似的東西。 – rompetroll

+0

由於某種原因,它不起作用。你能幫我嗎?我編輯了這個問題。 – Deam

0

這些配置屬性通常來自.properties文件 - 簡單地使用不同的屬性文件(與測試值)在單元測試類路徑

+0

通過使用屬性文件,將被測試的類中的字段被初始化。以及我的測試如何在其他答案中識別屬性文件,@ContextConfiguration被用於此(儘管這對我沒有用)。 – Deam

+0

@ContextConfiguration是關於xml文件的,它依次加載一個屬性文件(通常)以從外部位置獲取屬性 – Bozho