在 Spring 中针对 属性 的多个值启动单元测试

Unit Test in Spring Boot for multiple values of property

我有一个 Spring 引导应用程序,它在我的 属性 文件中定义了一个 属性 application.mode。 属性 的值可以是 SINGLEMULTI.

src/main/resources/application.properties

application.mode=SINGLE

# also possible
#application.mode=MULTI

根据这个 属性 的值加载一些 beans 和 bonfigs。

src/main/java/com.example.SomeService.java

@Bean
@ConditionalOnExpression("'${application.mode}'.equalsIgnoreCase(\"SINGLE\")")
public class SomeService {
   // some code
}

我还有一个 @SpringBootTest 来检查上下文是否加载以及所有 bean 是否配置正确。

src/test/java/com.example.SpringBootApplicationTest.java

@SpringBootTest
public class SpringBootApplicationTest {

    @Test
    public void contextLoads() {
    }
}

目前我将 application.properties 文件复制到 src/test/resources 文件夹。我手动启动单元测试两次并编辑中间的 application.mode 值以检查 Spring 上下文是否加载了这两个值。

有没有办法 运行 这个单元自动测试两次并为每个 运行 注入不同的 application.mode 值?

您可以像这样覆盖某些属性(即使 src/test/resources 中没有属性文件):

@SpringBootTest(properties = { "application.mode=SINGLE" })
class Whatevertest {
    ...
}

我不确定您是否可以在 1 个测试中测试这两种情况 class,但是创建 2 个测试 classes 应该可以解决问题