3

使用 Spock 测试时,我已将一些属性硬编码到 spock 测试中。该示例是一个 JDBC url。我尝试了 @Value 注释和属性文件,但这似乎不起作用,因为我的测试没有刻板印象。是否有其他解决方案来注入属性值?

@ContextConfiguration(locations = "classpath*:applicationContext-test.xml")
class RepositoryTest extends Specification {

    @Shared sql = Sql.newInstance("jdbc:sqlserver:// - room - for - properties")    

}
4

3 回答 3

4

要使用PropertySourcesPlaceholderConfigurer,请添加一个@Configuration类:

@Configuration
@PropertySource("classpath:database.properties")
public class DatabaseConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

参考在这里

然后,在 Spock 中:

@Value('${foo.bar}') //Use single quote.
String fooBar

使用单引号的原因在这里

您可能需要添加@ContextConfiguration到您的 Spock 类中:

@ContextConfiguration(classes = DatabaseConfig .class)
class Test extends Specification {
    ...
}
于 2017-01-26T22:25:49.817 回答
1

@Shared 属性不能被注入,但是这样的东西应该可以工作(使用 Spring 3):

@Value("#{databaseProperties.jdbcUrl}")
String jdbcUrl

Sql sql

def setup() {
  if (!sql) {
    sql = new Sql(jdbcUrl)
  }
}

这假设您已经在 bean 定义文件中定义了“databaseProperties”:

<util:properties id="databaseProperties" location="classpath:database.properties" />
于 2011-07-03T20:13:02.067 回答
0

使用 jvm 系统属性“java -DdbUsername=bbbb”

于 2011-06-30T22:37:08.807 回答