2011-06-30 4 views
2

Spockテストを使用する場合、私はspockテストにハードコードされたいくつかのプロパティをハードコードしています。この例はJDBC URLです。私はプロパティファイルと共に@Valueアノテーションを試しましたが、これは私のテストがステレオタイプを持たないためうまくいかないようです。プロパティ値を注入する他のソリューションはありますか?Spockテストにプロパティ値を注入する方法は?

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

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

} 

答えて

1

@Shared性質を注入することはできませんが、このようなものは(春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

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 { 
    ... 
} 
関連する問題