2017-06-12 49 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。

相关问题