在 Spring 中针对 属性 的多个值启动单元测试
Unit Test in Spring Boot for multiple values of property
我有一个 Spring 引导应用程序,它在我的 属性 文件中定义了一个 属性 application.mode
。 属性 的值可以是 SINGLE
或 MULTI
.
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 应该可以解决问题
我有一个 Spring 引导应用程序,它在我的 属性 文件中定义了一个 属性 application.mode
。 属性 的值可以是 SINGLE
或 MULTI
.
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 应该可以解决问题