Spring Boot / JUnit,运行多个配置文件的所有单元测试
2022-09-04 02:37:16
我有一个BaseTest类,它由几个测试组成。每个测试都应针对 I 列出的每个配置文件执行。
我想过使用参数化值,例如:
@RunWith(Parameterized.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
// @ActiveProfiles("h2-test") // <-- how to iterate over this?
public abstract class BaseTest {
@Autowired
private TestRepository test;
// to be used with Parameterized/Spring
private TestContextManager testContextManager;
public BaseTest(String profile) {
System.setProperty("spring.profiles.active", profile);
// TODO what now?
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
Collection<Object[]> params = new ArrayList<>();
params.add(new Object[] {"h2-test" });
params.add(new Object[] {"mysql-test" });
return params;
}
@Before
public void setUp() throws Exception {
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
// maybe I can spinup Spring here with my profile?
}
@Test
public void testRepository() {
Assert.assertTrue(test.exists("foo"))
}
我如何告诉Spring使用这些不同的配置文件运行每个测试?事实上,每个配置文件将与不同的数据源(内存中的h2,外部mysql,外部oracle,..)进行通信,因此我的存储库/数据源必须重新初始化。
我知道我可以指定@ActiveProfiles(...),我甚至可以从BaseTest扩展并覆盖ActiveProfile注释。虽然这可以工作,但我只显示了我的测试套件的一部分。我的许多测试类都是从BaseTest扩展而来的,我不想为每个类创建几个不同的配置文件存根。目前工作,但丑陋的解决方案:
- BaseTest (@ActiveProfiles(“mysql”))
- FooClassMySQL(来自BaseTest的注释)
- FooClassH2(@ActiveProfiles(“h2”))
- BarClassMySQL(来自 BaseTest 的注释)
- BarClassH2(@ActiveProfiles(“h2”))
- FooClassMySQL(来自BaseTest的注释)
谢谢