我有一个通用代码库,需要使用不同的实现和运行时配置进行测试。思考多个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 {
...
有一定的技巧,让这样的工作..任何想法?谢谢!
我不认为使用配置文件解决了这个问题;即从ImplementationTesterA我需要使用ImplementationConfigA中指定的上下文运行类ApiTest中的所有测试。换句话说,Spring的SpringJUnit4ClassRunner并没有提供与@RunWith(Suite.class)和@ Suite.SuiteClasses({ApiTest.class})等效的机制,至少据我所知可以。 – crig
但是,您可以使用配置文件实现相同的功能,这就像是要运行哪一组测试的标签。 –
但我不能结合@RunWith(SpringJUnit4ClassRunner.class)和@RunWith(Suite.class)。所以从Spring测试类ImplemtationTesterA中,我如何获得它来运行类ApiTest中的所有测试(它在不同的项目中)? ApiTest具有API的通用测试,并且不知道这些实现的各种实现或配置。它所知道的是它期望实现接口被注入。我希望多个实现都能够使用这些共享测试。 – crig