当前位置: 首页 > 知识库问答 >
问题:

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

成和悌
2023-03-14
@RunWith(Parameterized.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
// @ActiveProfiles("h2-test") // <-- how to iterate over this?
html" target="_blank">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扩展而来的,我不想为每个类创建几个不同的profile-stub。目前正在工作,但很难看的解决方案:

  • 基本测试(@ActiveProfiles(“MySQL”))
    • FooClassMySQL(来自BaseTest的注释)
      • fooclassh2(@activeprofiles(“h2”))
        null

共有1个答案

古彦
2023-03-14

如果使用Maven,实际上可以从命令行指定活动配置文件(如果需要,也可以指定env变量):

mvn clean test -Dspring.profiles.active=h2-test

使用参数化测试的方法在这种情况下可能不起作用,因为必须在Spring启动其上下文之前指定profile。在这种情况下,当您运行参数化集成测试时,在测试运行程序开始运行您的测试之前,上下文就已经启动了。此外,JUnit的参数化测试的发明还有其他原因(使用不同的数据系列运行单元测试)。

编辑:还有一件事--当您决定使用@runwith(Parameterized.class)时,您将无法使用不同的运行程序。在许多情况下(如果不是全部,如果涉及到集成测试),您希望指定不同的运行程序,如springrunner.class-使用参数化测试,您将无法实现这一点。

 类似资料:
  • 配置和运行本地单元测试 本地单元测试 本地单元测试用来执行那些对Android没有依赖或Android依赖容易mock的单元测试. 本地单元测试运行在自己电脑上,测试用例在本地虚拟机上编译运行,执行速度快. 本地单元测试写在app\/src\/test\/java目录下. 本地单元测试使用JUnit或TestNG测试框架. 使用的演示代码 这里使用Google官方开源的示例进行演示,地址:http

  • 寻找在Springboot应用程序中配置多个配置文件特定属性文件的最佳方法。下面是一个例子: -资源  · --application.properties  · · · · · --德夫             --application-dev.properties             --ldap-dev.properties             --Quartz-Dev.Prope

  • 本文向大家介绍Spring Junit单元测试加载配置文件失败问题,包括了Spring Junit单元测试加载配置文件失败问题的使用技巧和注意事项,需要的朋友参考一下 JUnit是Java中最有名的单元测试框架,用于编写和运行可重复的测试,多数Java的开发环境都已经集成了JUnit作为单元测试的工具。好的单元测试能极大的提高开发效率和代码质量。 使用SpringJunit单元测试,通过@Cont

  • 我声明了一些特定于Maven配置文件的属性。我的pom.xml的一部分: 当我通过IntelliJ IDEA 2016启动Junit测试时,我在使用“ci”Maven配置文件时遇到一些问题。我通过“Maven项目”面板激活我的配置文件,然后启动测试。问题是“my.properties.file”属性值等于“foo.xml”,而不是“bar.xml”。 我对命令行没有问题(我可以使用“-Pci”标志

  • 一、JUnit 是什么? JUnit 是一个 Java 语言的回归测试框架(regression testing framework),由 Kent Beck 和 Erich Gamma 建立。 Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。 二、IDEA 的 开始JUnit测试 测试项:查询全部用户数据 junit测试方法: