2011-06-30 44 views
2

當使用Spock測試時,我硬編碼了一些硬編碼到spock測試中的屬性。該示例是一個JDBC URL。我將@Value註釋與properties文件一起使用,但這似乎不起作用,因爲我的測試沒有刻板印象。是否有其他解決方案來注入屬性值?如何將屬性值注入Spock測試?

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

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

} 

回答

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" /> 
+0

早些時候我試圖做更多或更少提供一個PropertyPlaceholderConfigurer一樣,但我不能讓這與@Value共同努力註解。 您使用util:屬性的方式非常完美! – Marco

+0

是否也可以爲此使用PropertyPlaceholderConfigurer? – Marco

0

使用JVM系統屬性 「的Java -DdbUsername = BBBB」

0

To u SE PropertySourcesPlaceholderConfigurer,添加一個@Configuration類:

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

參考是here

,然後在斯波克:

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

之所以用單引號是here

而且你可能需要添加@ContextConfiguration到您的斯波克類:

@ContextConfiguration(classes = DatabaseConfig .class) 
class Test extends Specification { 
    ... 
}