2016-08-31 8 views
10

私はSpringのテストで@DataJpaTestを使用しています。このテストでは、H2をメモリデータベースのようにdescribed hereとして使用します。私も生産のためにフライウェイを使用しています。しかし、一度テストが始まると、FlywayはSQLファイルを読み込んで読み込みます。 FlywayAutoConfigurationを除外して、残りの部分をhere in spring documentationのように保つには、HibernateにH2用のテーブルを作成させるためにどうすればいいですか?@DataJpaTestのSpringブート1.4.0で特定の自動構成を除外/無効にする方法は?

@RunWith(SpringRunner.class) 
@DataJpaTest 
public class MyRepositoryTest { 

    @Autowired 
    private TestEntityManager entityManager; 

    @Autowired 
    private MyRepository triggerRepository; 
} 
+0

、私のアプリケーション定義から自動設定を除外することで、同じ問題を解決するには、virgium03助け@ましたか?私も同様の問題に取り組んでいます。 – Adam

答えて

4

@OverrideAutoConfiguration注釈を試しましたか? それは "@EnableAutoConfigurationを無効にするのに使うことができる"と言います。 私はそこからあなたが何とかそのようなFlywayAutoConfiguration を除外することができると仮定しています:

@EnableAutoConfiguration(exclude=FlywayAutoConfiguration.class) 
+0

注釈は、@ ImportAutoConfigurationと組み合わせて使用​​できると述べています。 @ EnableAutoConfigurationを使用した除外は機能しません。私はFlywayを除いてすべての自動設定クラスを追加しようとしました。一部の部品が作動しています(例えば、フライウェイはもう蹴らない)。たとえば、トランザクションが機能していないため、@トランザクションを使用する必要があります。また、テーブルは自動的にHibernateによって作成されません。不足している部分があり、実際に除外を実行することを好みます。私は今すぐ次の設定を使用しています。 – LAC

+0

はRunWith(SpringRunner.class) @ SpringBootTest @ OverrideAutoConfiguration @ (=有効false)ImportAutoConfiguration(値= { CacheAutoConfiguration.class、 JpaRepositoriesAutoConfiguration.class、 DataSourceAutoConfiguration.class、 DataSourceTransactionManagerAutoConfiguration.class、 HibernateJpaAutoConfiguration.class 、 TransactionAutoConfiguration.class、 TestDatabaseAutoConfiguration.class、 TestEntityManagerAutoConfiguration.class}) は、トランザクション – LAC

+1

@私は、私たちを見てhttps://github.com/spring-projects/spring-boot/issues/6809を上げてきましたここで物事を改善することができます。 –

1

私はスポックのテストクラスで定義された私のDbUnitをテストと同じ問題を抱えていました。私の場合は、フライウェイの移行を無効にすることができましたし、このようなH2テスト・データベース・テーブルを初期化するために管理:

@SpringBootTest(classes = MyApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE, 
    properties = ["flyway.enabled=false", "spring.datasource.schema=db/migration/h2/V1__init.sql"]) 

私はスポックテスト仕様クラスにこの注釈を追加しました。

@ContextConfiguration(classes = MyApplication.class) 
1

私は春-データ-JPAアプリに古いJDBCアプリを変換していると私は、最初のテストに取り組んでいる:私はまた、コンテキストコンフィギュレーションの注釈を追加した場合にも、私はそれを動作させることができました今。 @DataJpaTestは理論的にそれを除外すべきですが、セキュリティ設定をブートストラップしようとすると、私はスプリングブートからセキュリティモジュールのインスタンス化エラーを見てきました。ここでドキュメントに続き

セキュリティ・モジュールとの私の問題は、おそらく私は(下記の私のPropertySpringConfig輸入経由)PropertySourcesPlaceholderConfigurerを使用して継承された既存の実装から茎

http://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#test-auto-configuration

とあなた@ LiviaMorunianuの答えにコメントしたので、私は春のブートの例外を回避し、自動設定された組み込みDBでJUnitを動作させることができました。

私のメイン/プロダクションスプリングブートブートストラップクラスは、テストから除外したいものを含め、すべてをブートストラップします。したがって、@DataJpaTestを使用する代わりに、私は何をしているのかを多くコピーし、@Importを使用して、すべてのテスト/ライブセットアップで使用される集中構成を導入しました。

私は、最初にcom.mycompany.repositoriesに基づいたテストを実行していて、com.mycompany.entitiesのエンティティを見つけられなかったので、私が使用するパッケージ構造のために問題が発生しました。

以下は関連するクラスです。

JUnitテスト

@RunWith(SpringRunner.class) 
@Transactional 
@Import({TestConfiguration.class, LiveConfiguration.class}) 
public class ForecastRepositoryTests {  

    @Autowired 
    ForecastRepository repository; 
    Forecast forecast; 

    @Before 
    public void setUp() { 
     forecast = createDummyForecast(TEST_NAME, 12345L); 
    } 

    @Test 
    public void testFindSavedForecastById() { 
     forecast = repository.save(forecast); 
     assertThat(repository.findOne(forecast.getId()), is(forecast)); 
    } 

ライブの構成

@Configuration 
@EnableJpaRepositories(basePackages = {"com.mycompany.repository"}) 
@EntityScan(basePackages = {"com.mycompany.entity"}) 
@Import({PropertySpringConfig.class}) 
public class LiveConfiguration {} 

テスト構成

@OverrideAutoConfiguration(enabled = false) 
@ImportAutoConfiguration(value = { 
     CacheAutoConfiguration.class, 
     JpaRepositoriesAutoConfiguration.class, 
     DataSourceAutoConfiguration.class, 
     DataSourceTransactionManagerAutoConfiguration.class, 
     HibernateJpaAutoConfiguration.class, 
     TransactionAutoConfiguration.class, 
     TestDatabaseAutoConfiguration.class, 
     TestEntityManagerAutoConfiguration.class }) 
public class TestConfiguration { 
    // lots of bean definitions... 
} 

PropertySpringConfig

@Configuration 
public class PropertySpringConfig { 
    @Bean 
    static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() 
       throws IOException { 
     return new CorePropertySourcesPlaceholderConfigurer(
      System.getProperties()); 
    } 
} 
3

私のbuild.gradleにインメモリデータベースへの依存を追加
例えばtestRuntime "com.h2database:h2:1.4.194"

さらに、flyway.enabled=falseをsrc/test/resourcesのapplication.propertiesに追加すると私にとってうまくいった。

1

私はすなわち

@SpringBootApplication(exclude = {FlywayAutoConfiguration.class}) 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 
関連する問題