我有一个通用代码库,需要使用不同的实现和运行时配置进行测试。考虑具有多个 DAO 实现的服务。我有测试 Dao 接口(interface)的通用单元测试(需要 Autowiring Dao),我想从不同的项目中调用它们。
基本上我想要这样的东西。
在共享的通用项目中,我的测试将生效。
所以本质上,例如,在共享项目中,我有我的测试。
public class ApiTest {
@Autowired
DaoBase myDao;
@Test
public void testSomething(){
}
}
然后在实现道的其他项目中,我会:
@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 {
...
必须有一个技巧才能使这样的事情起作用..有什么想法吗?谢谢!
最佳答案
使用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 {
...
关于spring - 在不同项目中使用多个 Spring 上下文运行 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501869/