Spring 3.1.1/JPA/Hibernate 4 Web アプリ用に、いくつかの JPA リポジトリ、サービス、およびサポート クラスを作成しました。ただし、ユニットと統合テストをいくつか書きたいと思っています (最初にそれらを書くことになっています)。XML ではなく JavaConfig を使用しているため、テストする最善の方法を考えています。私が解決しようとしている特定の問題は次のとおりです。
DataSource、JpaTransactionManager、LocalContainerEntityManagerFactoryBean、およびすべてのリポジトリを宣言する @Configuration があります。明らかに、統合テストのためにすべてを開始したくないので、EmbeddedDatabase と H2 を使用してメモリ内データベースを作成し、値を入力してから、それに対してリポジトリを使用できると考えました。ただし、私が見たドキュメントは、これをまとめるのに役立ちませんでした。私はこれを持っています:
@RunWith( SpringJUnit4ClassRunner.class )
public class TestMenuService {
private EmbeddedDatabase database;
@Autowired
private MenuRepository menuRepository;
@Before
public void setUp() throws Exception {
database = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).setName("myschema")
.addScript("classpath:schema.sql").build();
menuRepository = new MenuRepository();
Assert.assertNotNull(database);
}
しかし、menuRepository はインスタンス化されないため、@Configuration のテスト バージョンを作成してみました。
@Configuration } )
@ComponentScan( basePackages = { "com.mycompany.service"} )
@EnableTransactionManagement
@ImportResource( "classpath:applicationContext.xml" )
@PropertySource( "classpath:test-application.properties" )
public class TestEdmConfiguration {
@Bean
MenuRepository menuRepository() {
return new MenuRepository();
}
私のtest-applicationContext.xml
<jpa:repositories base-package="com.mycompany.servce.repository"/>
私のtest-application.properties:
db.driver=org.h2.Driver
db.username=sa
db.password=
db.url=jdbc:h2:mem:myschema
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.format_sql=true
hibernate.hbm2ddl.auto=create
hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
hibernate.show_sql=true
ただし、これには、上記のすべてのデータソースなどを作成する必要があります。この Bean のすべてのサポート Bean を複製しているようです。
他のすべての依存関係なしに、リポジトリと組み込みデータベースをテストに分離する方法はありますか?