背景说明:
- Java 11和Sping Boot 2.6.6中的项目逻辑
- 一些项目特性是有条件可用的,这取决于特定的应用程序属性,一些与条件特性相关的Spring组件也依赖于对组件使用@ConditionalOnProperty注解
- 测试(也包括集成)是用groovy和spock框架(2.1版-groovy-3.0版)编写的。
问题:是否可以使spock规范以spring的www.example.com中的属性为条件application.properties?
Spock框架提供了使测试具有条件的注解。对于我的情况,最准确的注解似乎是@Requires。(https://spockframework.org/spock/docs/2.1/all_in_one.html#_requires)条件基于先决条件上下文(https://spockframework.org/spock/docs/2.1/all_in_one.html#precondition_context)。
简化的规范示例(两个工作@需要注解作为示例,但它们不检查我的情况下需要什么):
import org.spockframework.runtime.extension.builtin.PreconditionContext
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.ActiveProfiles
import org.springframework.test.context.ContextConfiguration
import spock.lang.Requires
import spock.lang.Specification
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles('integration')
@ContextConfiguration(classes = TestSpringBootApplication)
//TODO: How to make this feature dependent of property from application.properties?
//@Requires(reason = 'Specification for AAA feature enabled', value = { isFeatureAAAEnabled() })
//@Requires(reason = 'Test run only on Linux', value = { PreconditionContext preconditionContext -> preconditionContext.os.windows })
class ConditionalSpec extends Specification {
//Some conditional components @Autowired
//feature methods
def "one plus one should equal two"() {
expect:
1 + 1 == 2
}
private static boolean isFeatureAAAEnabled() {
true
}
}
1条答案
按热度按时间xoshrz7s1#
你到底想要什么,是不运行任何测试但仍然启动Spring上下文就足够了,还是你也想避免启动Spring上下文?
如果它是第一个,则可以使用前提条件上下文中的
instance
或shared
。如果启用了共享字段注入,则应该可以执行此操作。如果由于共享注入的限制而无法使用它,则必须在条件中将
shared
替换为instance
。如果你想避免启动spring,那么你必须编写自己的扩展来计算
application.properties
的值,并且自己跳过规范。