2011-06-30 4 views
2

Lors de l'utilisation d'un test Spock, j'ai codé en dur certaines propriétés codées en dur dans le test spock. L'exemple est une URL JDBC. J'ai essayé l'annotation @Value avec un fichier propertie, mais cela ne semble pas fonctionner car mon test n'a pas de stéréotype. Existe-t-il d'autres solutions pour injecter des valeurs de propriété?Comment injecter des valeurs de propriétés dans un test Spock?

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

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

} 

Répondre

1

propriétés @Shared ne peuvent pas être injecté, mais quelque chose comme cela devrait fonctionner (avec Spring 3):

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

Sql sql 

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

Cela suppose que vous avez défini "databaseProperties" dans votre fichier de définition de bean:

<util:properties id="databaseProperties" location="classpath:database.properties" /> 
+0

Plus tôt j'ai essayé de faire plus ou moins la même chose avec un PropertyPlaceholderConfigurer, mais je ne pouvais pas obtenir ce à travailler ensemble avec le @Value annotation. Votre façon d'utiliser les util: propriétés fonctionne parfaitement! – Marco

+0

Est-il également possible d'utiliser PropertyPlaceholderConfigurer pour cela? – Marco

0

utilisation des propriétés du système jvm "java -DdbUsername = bbbb"

0

se PropertySourcesPlaceholderConfigurer, ajouter une classe @Configuration:

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

Référence est here.

Et puis, Spock:

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

La raison d'utiliser guillemet simple est here.

Et vous avez probablement besoin d'ajouter @ContextConfiguration à votre classe de Spock:

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