是否可以标记Springboot测试,使其仅在特定配置文件处于活动状态时运行

erhoui1w  于 2023-04-20  发布在  Spring
关注(0)|答案(6)|浏览(137)

我有两个profile:dev和default。当active profile是default时,我想跳过一些(不是所有)测试。是否可以以某种方式标记这些测试?或者如何实现这一点?我使用springboot。这是我的父测试类:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyServiceStarter.class, webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT,
        properties = {"flyway.locations=filesystem:../database/h2", "server.port=9100", "spring.profiles.default=dev"})
@Category(IntegrationTest.class)
public abstract class AbstractModuleIntegrationTest { ... }
kdfy810k

kdfy810k1#

这里是JUnit 5.9.x的另一个替代方案。这只适用于测试方法,而不是类级别,因为在这种情况下,isProfileActive需要是static

@SpringBootTest
public class SomeTest {

    @Autowired
    Environment environment;

    @Test
    @DisabledIf("isProfileActive")
    void testMethod() {}

    boolean isProfileActive() {
        return Arrays.stream(this.environment.getActiveProfiles()).toList().contains("myprofile");
    }
}
unhi4e5o

unhi4e5o2#

我的同事找到了一个解决方案:因此,如果你需要注解单独的测试,你可以使用@IfProfileValue注解:

@IfProfileValue(name ="spring.profiles.active", value ="default")
    @Test
    public void testSomething() {
        //testing logic
    }

此测试仅在默认配置文件处于活动状态时运行
更新:对于Junit 5用途:

@EnabledIfSystemProperty(named = "spring.profiles.active", matches = "default")

更多信息:https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#integration-testing-annotations-meta

ncecgwcz

ncecgwcz3#

是的,你能做到。
例如使用@ActiveProfiles

@ActiveProfiles("default")
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourTest {
   //tests
}
vawmfj5a

vawmfj5a4#

@IfProfileValue仅适用于JUnit 4。如果您使用的是JUnit 5,那么此时应该使用@EnabledIf@DisabledIf
示例:

@DisabledIf(
    expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
    reason = "Disabled on Mac OS"
)

更多详情请参见文档。

ttygqcqt

ttygqcqt5#

如果要从命令行运行测试,请使用以下命令:

SPRING_PROFILES_ACTIVE=dev ./gradlew test

如果上面的方法都不适合你,你可以使用下面的注解(在一个类或单个测试方法上):

@DisabledIfEnvironmentVariable(named = "SPRING_PROFILES_ACTIVE", matches = "(dev|default|local)")

如果Spring曲线设置为devdefaultlocal(正则表达式),则测试将被禁用

sd2nnvve

sd2nnvve6#

您可以使用此基于配置文件的条件:

@EnabledIf(value = "#{'${spring.profiles.active}' == 'test'}", loadContext = true)

相关问题