我有一个通用代码库,我需要使用不同的实现和运行时配置进行测试。考虑具有多个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 {
...
必须成为这样一个工作的伎俩..任何想法?谢谢!
答案 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。