在不同的项目中使用多个Spring上下文运行JUnit测试

时间:2017-06-12 14:25:40

标签: spring junit spring-test

我有一个通用代码库,我需要使用不同的实现和运行时配置进行测试。考虑具有多个DAO实现的服务。我有通用的单元测试来测试Dao接口(需要Dao自动装配),我想从不同的项目中调用它们。

基本上我想要这样的东西。 在共享的通用项目中,我的测试将会存在。 基本上,在共享项目中,我有我的测试,例如。

public class ApiTest {

@Autowired
DaoBase myDao;

    @Test
    public void testSomething(){
    }
}

然后在实现Dao的其他项目中,我会:

@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 {
...

必须成为这样一个工作的伎俩..任何想法?谢谢!

2 个答案:

答案 0 :(得分: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 {
...

答案 1 :(得分:0)

只是为了更新: 我结束了将所有共享测试放在一个项目中,然后在每个DAO实现项目中创建一个" dummy"扩展每个共享测试类的测试类。不像定义套件那么方便,因为每个测试类都必须在每个实现项目中重复,但它可以工作。

所以在最初的例子中,唯一必要的改变是使ImplemtationTesterA扩展ApiTest。