gpt4 book ai didi

java - Spring Boot/JUnit,为多个配置文件运行所有单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:04 29 4
gpt4 key购买 nike

我有一个包含多个测试的 BaseTest 类。应针对我列出的每个配置文件执行每个测试。

我考虑过使用参数化值,例如:

@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 扩展而来,我不想为每个类创建几个不同的配置文件 stub 。目前有效,但丑陋的解决方案:

  • BaseTest (@ActiveProfiles("mysql"))
    • FooClassMySQL(来自 BaseTest 的注解)
      • FooClassH2(@ActiveProfiles("h2"))
    • BarClassMySQL(来自 BaseTest 的注解)
      • BarClassH2(@ActiveProfiles("h2"))

谢谢

最佳答案

物有所值:

我的用例是为多个 Spring 配置文件运行特定的测试类,这就是我实现它的方式:

@SpringBootTest
abstract class BaseTest {
@Test void doSomeTest() {... ARRANGE-ACT-ASSERT ...}
}

@ActiveProfiles("NextGen")
class NextGenTest extends BaseTest {}

@ActiveProfiles("Legacy")
class LegacyTest extends BaseTest {}

关于java - Spring Boot/JUnit,为多个配置文件运行所有单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200126/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com