2012-04-27 86 views
5

在我的春天+ Maven的應用程序,我已經創建了,我現在想對多個數據源運行數據訪問層的一些測試。我有類似:行家:運行相同的測試進行不同的配置

@ContextConfiguration(locations={"file:src/test/resources/testAppConfigMysql.xml"}) 
public class TestFooDao extends AbstractTransactionalJUnit38SpringContextTests { 
    public void testFoo(){ 
    ... 
    } 
} 

它目前的配置位置的硬編碼的,所以它只能針對一個數據源使用。 調用兩次測試並傳遞兩個不同配置(比如testAppConfigMysql.xml和testMyConfigHsqlDb.xml)的最佳方式是什麼?

我見過的建議通過系統屬性來做到這一點。我如何告訴maven使用系統屬性的不同值來調用兩次測試?

回答

1

我不知道是否有一些性感和花哨的解決方案,是簡單爲好,這一點。我只想實現基類的所有測試的東西,然後繼承它分成2個教學班,不同的基於註解的配置,例如:

@ContextConfiguration(locations={"firstDs.xml"}) 
public class TestFooDaoUsingFirstDs extends TestFooDao { 
} 

@ContextConfiguration(locations={"secondDs.xml"}) 
public class TestFooDaoUsingSecondDs extends TestFooDao { 
} 

除非你必須處理真正大量不同數據源的這種方式,那就是對我來說還可以。

+0

但是我有很多的daos美孚,酒吧,...(其中約15),因此,15個測試類TestFooDao,TestBarDao,...在你的解決方案,我不得不加倍類的數量,這是我做的不想要(我也不想把所有的測試合併成一個巨大的類) – jfu 2012-04-27 10:02:51

+0

是的,我知道。但我真的沒有看到更好的解決方案。正如我所說的,我完全意識到這個解決方案並不完美,並且會吸引一點點。我剛纔想到的另一件事是嘗試使用某種JUnit的Theories與Spring配合的命令支持。這意味着你可以放棄Spring上下文的基於註解的配置,並嘗試通過調用某種方法來設置它。不過,我不知道Spring API足夠好,可以在這裏給你一些參考或示例。我不確定它是否真的可行並且工作正常,但我只是想說一下。 – 2012-04-30 09:39:23

+0

另一個想法:可能延長一點點春天測試支持類(如'SpringJUnit4ClassRunner'或周圍的一些助手)會解決的情況下,如果沒有真正出的現成的解決方案。在我看來,您可以覆蓋處理'@ ContextConfiguration'註釋的代碼片段,並嘗試實現自己的邏輯,可能使用接受參數指向多個上下文的自定義註釋。 – 2012-04-30 13:10:18

0

而不是file:...,你可以使用classpath:...(去掉src/test/resources,它隱含的,如果你使用classpath)。然後你就可以擁有與線單一的主背景:

<import resource="dao-${datasource}.xml" />

如果你運行Maven構建與選項-Ddatasource=foo,它會與任何你指定更換主上下文的${datasource}。所以你可以有datasource-foo.xml,datasource-bar.xml等你的不同配置。

(您需要啓用在POM Maven的資源過濾這個工作)。

或者,看看新的東西,在春季3.1:http://www.baeldung.com/2012/03/12/project-configuration-with-spring/

編輯:第三個選擇是讓所有的測試類延長一些超,並使用 JUnit的@Parameterised,其中的參數不同春上下文。在這種情況下,您不能使用@ContextConfiguration,但可以始終手動創建Spring上下文,然後使用org.springframework.beans.factory.config.AutowireCapableBeanFactory.autowireBean()

+0

我想運行一次maven並測試兩個數據源;在你的解決方案中,我需要運行兩次,傳遞兩個數據源變量的值。是否可以在maven surefire插件中設置變量(例如,定義兩個執行或某些類型)?我們的目標是在運行mvn test時測試兩個數據源測試 – jfu 2012-04-27 10:37:13

+0

是的,這有點痛苦。我沒有太多的運氣運行故障安全/ surefire插件不止一次 - 他們往往會對輸出文件夾等感到困惑。 – artbristol 2012-04-27 10:38:57

相關問題