当我在Spring 5(不是Spring Boot)应用程序上工作时,我正在尝试在工作流中应用TDD,但是我的运行测试大约需要45s,这使我的开发周期相当慢。标准单元测试非常快速,但是我有一个测试可以验证Spring上下文配置-它需要30多个时间。
我的想法是在开发周期中每次都禁用此特定测试,并不时运行它-例如当我使用应用程序创建Docker映像/进行更改的提交/推送时。
因此,这是我到目前为止的想法:
运行docker-profile时定义属性:
<profiles>
<profile>
<id>docker-build</id>
<properties>
<build.profile.id>docker-build</build.profile.id>
</properties>
<build>...</build>
</profile>
</profiles>
在test.properties
中使用它:
app.profile=${build.profile.id}
在测试中使用@EnabledIf
批注:
@TestPropertySource("classpath:test.properties")
@SpringJUnitConfig( classes = MainConfiguration.class )
@EnabledIf("#{'${app.profile}' == 'docker-build'}")
public class SpringConfigTest {
...
}
它似乎不起作用-我可能是错的,但是当我在app.profile
中调用@EnabledIf
属性时似乎不可用。 或者也许我走错了路线,并且有一种更简单的方法来禁用此特定测试-目前,我以mvn test
的身份运行它。我想知道为什么app.profile
的{{1}}属性不可见。
修改 我发现我可以跳过前两个步骤并在命令行中定义属性:
@EnabledIf
但不确定为什么我无法从mvn -Dapp.profile=docker-build test
文件中获取财产
答案 0 :(得分:0)
我认为在这种情况下,您需要为@EnabledIf的春季版本加载上下文,以评估表达式。这样就可以了:
@EnabledIf(expression = "#{'${app.profile}' == 'docker-build'}", loadContext = true)
还要确保属性文件包含在启用过滤的maven testResources中:
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>
我认为以上所述应解决您面临的特定财产问题。但是,因为这不会跳过加载spring上下文,所以也许更好的方法是在maven配置文件中配置为基于包或测试类名称跳过测试-与Is there a way to tell surefire to skip tests in a certain package?
类似