さらに、Spring Testing Frameworkと一緒に使うなら、Spring Test DBUnit!
なのですが、環境構築する際にはまったので、そのときの備忘録φ(..)メモメモ
最終的にはこんな感じでアノテーションベースでDBUnitが使えます
public class TestFooRepository extends AbstractRepositoryTest { @Autowired private FooRepository repo; @Test @DatabaseSetup("/db/test001/setup.xml") @ExpectedDatabase("/db/test001/expected.xml") public void test001() { List<FooEntity> foos = repo.findAll(); assertThat(foos.size(), is(4)); } }
まずは、build.gradleのdependencies
dependencies { ・・・ testCompile('org.springframework.boot:spring-boot-starter-test') testCompile 'com.github.springtestdbunit:spring-test-dbunit:1.3.0' testCompile 'org.dbunit:dbunit:2.5.2' }
DBUnitで使うデータソースの設定
公式だと、xmlのBean定義を使うようになっているけど、SpringBootで使いたいのでアノテーションベースで設定
public class TestDataSourceConfig { private static final String URL = "jdbc:postgresql://localhost:5432/test"; private static final String USERNAME = "postgres"; private static final String PASSWORD = "postgres"; @Bean public DataSource dataSource() { return new DriverManagerDataSource(URL, USERNAME, PASSWORD); } }
あとはJUnitに適宜アノテーションをつければ完了!
@RunWith(SpringJUnit4ClassRunner.class) @EnableWebSecurity @SpringApplicationConfiguration(classes = { HogeApplication.class, TestDataSourceConfig.class }) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class }) @Transactional public class TestFooRepository extends AbstractRepositoryTest { @Autowired private FooRepository repo; @Test @DatabaseSetup("/db/test001/setup.xml") @ExpectedDatabase("/db/test001/expected.xml") public void testFindAll() { List<FooEntity> foos = repo.findAll(); assertThat(foos.size(), is(4)); } }
(おまけ) DBUnitのDataSetをCSVでつくりたい
CSVやほかの形式にしたい場合には、DataSetLoaderをカスタムすればよいらしい。
public class CsvDataSetLoader extends AbstractDataSetLoader{ @Override protected IDataSet createDataSet(Resource resource) throws Exception { return new CsvURLDataSet(resource.getURL()); } }
自作したDataSetLoaderを使う際は、@DbUnitConfiguration
で指定すればOK
【注意】@DatabaseSetup
などの引数は末尾に/
を付けないと、失敗する
@RunWith(SpringJUnit4ClassRunner.class) // ・・・中略 @DbUnitConfiguration(dataSetLoader = CsvDataSetLoader.class) @Transactional public class TestFooRepository extends AbstractRepositoryTest { @Autowired private FooRepository repo; @Test @DatabaseSetup("/db/test001/setup/") @ExpectedDatabase("/db/test001/expected/") public void testFindAll() { // 略 } }
以上!!
参考になる書籍
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/12/20
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/01/30
- メディア: 単行本
- この商品を含むブログを見る
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (I・O BOOKS)
- 作者: 槙俊明
- 出版社/メーカー: 工学社
- 発売日: 2016/09/01
- メディア: 単行本
- この商品を含むブログ (1件) を見る
【宣伝】複数言語へ一括翻訳できる文章・単語の管理アプリ『トランスノート』をリリースしました!
トランスノート|https://trans-notes.net/:plain
アプリやサービスの多言語対応をサポートしてくれるWebサービスです。
メッセージごとにIDをつけれるので、メッセージ一覧の作成・管理に利用できて、
AndoridのXML形式とか、ファイルをそのまま配置できるとこまでやってくれます。
詳しい内容はこちらの記事で。 wannabe-jellyfish.hatenablog.com
参考にしたサイト様
- DbUnit – About DbUnit
- Spring Test DBUnit – Introduction
- Spring bootでweb ユニットテスト編
- Spring Boot でログイン画面 + 一覧画面 + 登録画面の Webアプリケーションを作る ( その10 )( ログイン画面作成3 ) - かんがるーさんの日記
- 意外に知らないDbUnitでCSVを使う方法 - Fight the Future
- Spring Boot + DBUnit でテスト用のDBを定義する - ryhmrt’s blog
- spring-boot-dbunit-example/HsqldbexampleApplicationTests.java at master · ekcode/spring-boot-dbunit-example