2017-06-12 51 views
1

我有一個通用代碼庫,需要使用不同的實現和運行時配置進行測試。思考多個DAO實現的服務。我有測試Dao接口的通用單元測試(需要Dao autowired),並且我想從不同的項目調用這些測試。在不同的項目中使用多個Spring上下文運行JUnit測試

基本上我想要這樣的東西。 在共享的通用項目中,我的測試將會存在。 所以基本上,在共享項目中,我有我的測試,例如。

public class ApiTest { 

@Autowired 
DaoBase myDao; 

    @Test 
    public void testSomething(){ 
    } 
} 

然後在實現了道的其他項目(S),我會:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
public class ImplemtationTesterA { 

    //somehow invoke ApiTest.class? 
} 

@Configuration 
public class ImplementationConfigA{ 
    @Bean 
    DaoBase daoBase { 
     return new DaoImplementationGraphDB(); 
    } 
} 

同樣,有多個項目以不同的方式實現DAO層,我想共享通用測試。

如果我可以將@RunWith(SpringJUnit4ClassRunner.class)和@RunWith(Suite.class)結合起來,那就是我的願望,但這似乎不可能。即這將是我想要的有效,這是不可能的:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
@RunWith(Suite.class) 
@Suite.SuiteClasses({ ApiTest.class }) 
public class ImplemtationTesterA { 
... 

有一定的技巧,讓這樣的工作..任何想法?謝謝!

回答

0

使用profiles

@Configuration 
@Profile("profileA") 
public class ImplementationConfigA{ 
    @Bean 
    DaoBase daoBase { 
     return new DaoImplementationGraphDB(); 
    } 
} 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
@RunWith(Suite.class) 
@Suite.SuiteClasses({ ApiTest.class }) 
@ActiveProfiles("profileA"); 
public class ImplemtationTesterA { 
... 
+0

我不認爲使用配置文件解決了這個問題;即從ImplementationTesterA我需要使用ImplementationConfigA中指定的上下文運行類ApiTest中的所有測試。換句話說,Spring的SpringJUnit4ClassRunner並沒有提供與@RunWith(Suite.class)和@ Suite.SuiteClasses({ApiTest.class})等效的機制,至少據我所知可以。 – crig

+0

但是,您可以使用配置文件實現相同的功能,這就像是要運行哪一組測試的標籤。 –

+0

但我不能結合@RunWith(SpringJUnit4ClassRunner.class)和@RunWith(Suite.class)。所以從Spring測試類ImplemtationTesterA中,我如何獲得它來運行類ApiTest中的所有測試(它在不同的項目中)? ApiTest具有API的通用測試,並且不知道這些實現的各種實現或配置。它所知道的是它期望實現接口被注入。我希望多個實現都能夠使用這些共享測試。 – crig

0

只是爲了更新: 我最終把所有的共享測試是一個項目,然後在每個DAO實現項目創建一個「虛擬」的測試類擴展的每個共享測試類。不像定義一個套件那麼方便,因爲每個測試類都必須在每個實施項目中重複,但是它很有用。

因此,在最初的例子,需要唯一的變化是使ImplemtationTesterA延長APITEST。

相關問題