DbUnitでテーブルのカラム名にDBの予約語を使おうとすると例外がスローされた DBの予約語を使う際は、エスケープ処理が必要そう DatabaseConfig config = connection.getConfig(); config.setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, "\"?\"");
各バージョン 訳あってSpringのバージョンが3.2.8.RELEASEですが、4系の最新版でも問題ないです。 その場合、Spring Test DBUnitのバージョンは、1.3.0が良いです。 Java 1.8.0 update 92 Spring Framework 3.2.8.RELEASE Spring Test DBUnit 1.0.1 DbUnit 2.5.2 H2 Database 1.4.191 JUnit 4.12 背景 Spring + DbUnit + Spring Test DBUnit を使ってDB関連クラスの単体テストを行う場合に、 各開発者の環境やCI環境においてそれぞれの環境でDBを用意するのは大変なので、 インメモリなH2 Databaseを採用することは少なくないと思っています。 <bean id="dataSource" class="org.h2
「データセット」とは? DBUnitについて調べてて気になったのが「データセット」という単語。 DBUnitの説明に必ず出てくる割には、これがどういったものなのかぴったりくる説明がありませんでした。 これは、テーブル名・カラム名・データ・主キー の情報のかたまりです。 この情報はIDataSet#getTableMetaData()で取得できます。 ちなみに主キー情報はテーブルからデータを取得した時に設定されます。 DatabaseOperationについて試したり調べたりする機会があったのですが、現在のバージョンではJavadoc(英語)くらいしかいい資料がなかったのでまとめてみました。 もし外部キー制約違反や一意性制約違反が起こった場合は、org.dbunit.DatabaseUnitExceptionが発生します。 この例外は、各DBMSの例外をラップしています。 全てのDataba
DbUnitとH2 Databaseでデータベースのユニットテスト はじめの一歩(環境構築、初期値データのセット、XML/Excel/CSV テーブルの比較)JavaJUnitgradleDBUnith2 はじめに データベースを使ったJavaアプリケーションのユニットテストが難しい理由として以下の3つがあげられると思います。 1. データベースのセットアップの問題 2. テストコードやテストデータのメンテナンス性の問題 3. テストに時間がかかる問題 これらの問題に対応するため、DbUnit(リンク)とH2 Database(リンク)を使ってユニットテストをしてみます。 DbUnitは、依存しているライブラリが多いため、Gradleを使って環境構築していきます。 DBUnit DBUnitは、JUnitのデータベース用の拡張モジュールです。 xmlファイルに書いたデータベースの状態をセッ
Spring Boot に限った話ではないんだけど、今回 Spring Boot で書いたので、そんなタイトルに。 必要とされるシーンが多いわりに、意外と情報が少なかったので、まとめておきます。 DbSetup を使用するものと、DBUnit を使用するもの、それぞれを紹介します。 なお、今回はテストに Groovy Spock を使用します。 検証に使用したものを GitHub に公開しておいたので、こちらを確認しながら追いかけると、より理解しやすいかもしれません。 https://github.com/yo1000/com.yo1000.edu.boot.dbtest 環境 Java 1.8.0_91 Maven 3.3.9 (Maven wrapper) Spring Boot 1.4.0.RELEASE Groovy 2.4.7 Spock 1.1-groovy-2.4-rc-1
過去にこんな記事 (Spock ちっくにテストデータを挿入してみた話) も書きましたが、最近は DBUnit だけでなく、DbSetup を使用することも多かったので、当時作成したモジュールをアップデートしてみました。 なかなかいい感じにデータ表現できるようになったので、ご報告。 環境 Java 1.8.0_91 Maven 3.3.9 Groovy 2.4.7 Spock 1.1-groovy-2.4-rc-1 DbSetup 2.1.0 DBUnit 2.5.3 $ ./mvnw --version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00) Maven home: /Users/yo1000/.m2/wrapper/dists/apache-maven
過去に以下記事にて、Spock ライクにテストデータを表現することにチャレンジしてきました。 Spock ちっくにテストデータを挿入してみた話 Spock ライクにテストデータを表現する それでもまだ、col、row といった記述が残ってしまっており、より Spock ライクな記述に近づけることはできないかと考えていたところ、他にも似たようなことを試している方がいることに気が付き、参考にさせていただきました。参考にさせていただいたのは以下記事、およびプロジェクトです。 Javaのテストでも使えるテーブルセットアップ用のGroovy DSL https://github.com/disc99/hogan そして、完成したのがこちら。 https://github.com/yo1000/dbspock テーブル名A { 列名A1 | 列名A2 | 列名A3 | ... '行A1:値A1' |
これはJava Advent Calendar 2016 ¥- Qiitaの10日目の記事です。 9日目の記事はdeaf_tadashiさんのマイクロベンチマークツール、JMHについて でした。 11日目は @leak4mk0 さんです。 このページについて DBUnitを使用して、BLOB型カラムにテストデータ(主に画像とか、PDF)を入れたいときには、 XMLでそのファイルを指定する仕組みが用意されています。 が、今回は、EXCELからBLOB型カラムにテストデータを入れる方法を紹介したいと思います。 DBUnitを使ったことがない方は、使い方については、日本語情報が沢山あるので、 ぐぐってみてください。 書く目的 BLOB型カラムのデータをインポートする際に躓いたので、その共有です。 レアリティの高いシチュエーションだとは思いますが、 こんな方法でいけるぜ!というのを知っていただけれ
Spring では、テスト対象の内部だけでなく、テストそのものの前後にもトランザクションを使用できます。テストデータを作成するライブラリのひとつである、DBUnit を使用することで、テストデータの挿入についても、同じトランザクションで管理できるようになります。 テスト対象メソッドの Propagation 設定にもよりますが、多くの場合設定されているであろう Propagation.REQUIRED (@Transactional アノテーションでのデフォルト設定値) を使用していれば、テストで開始したトランザクションを、テスト対象にも引き継ぐことができ、テスト対象メソッドの内部でデータに変更が生じたとしても、テスト終了時にこの変更をロールバックすることができるようになります。 環境 Java 1.8.0_91 Maven 3.3.9 (Maven wrapper) Spring Boo
結論 PHPUnit_Extensions_Database_TestCaseクラスの初期化処理では、外部キー制約があるとうまく初期化できない場合がある オプションでTRUNCATE処理にCASCADEを追加できるが、外部からこのオプション引数は制御できない 引数なしで実行しているメソッドをオーバーライドすることで、CASCADEするようにしてやる class HogeTest extends \PHPUnit_Extensions_Database_TestCase { protected function getSetUpOperation() { // 引数にtrueを渡すように上書き return \PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT(true); } public function setUp()
対処前に発生するエラー org.dbunit.dataset.NoSuchColumnException: users.ADDR - (Non-uppercase input column: addr) usersというテーブルのADDRカラムがinet型です。 対処方法 PostgresqlDataTypeFactoryクラスを使う 使い方は以下の通り。 DatabaseConnectionに対してPostgresql独自の型を提供するクラスを追加してあげます。 getDBConnection()の実装は「Spring + Mybatis + DbUnit を使ってみた」を参照ください。 DatabaseConnection connection = getDBConnection(); connection .getConfig() .setProperty( DatabaseConf
はじめに 今回は、プログラム開発では大活躍!単体テストで使用できるフレームワーク、「DBUnit」の使い方を紹介します。 DBUnitとは、Javaで使用するテスティングフレームワークの一つなのですが、筆者が勉強した感じでは、記事が古かったり、それだけで完全に事足りるwebが少ないように見受けられたので、筆者の備忘と、この記事をご覧いただいた方への共有も兼ねて、こちらにまとめておきます。 参考としてwebに資料を記載いただいている優しい方も、たくさんいらっしゃるんですけどねorz 1. DBUnitとは 先にも記載しましたが、DBUnitとは、Javaプログラムのテスティングフレームワークの一つです。 テスティングフレームワークと聞くと、XUnitを想像されるかと思います。 今回の対象はJavaで実装したプログラムですから、よく使用するのはJUnitですが、DBUnitもJUnitと一緒に
JUnit にて Flyway を起動した際、schema_version テーブルが存在しないと表示される現象についてJUnitDBUnitFlywaySpringBoot 概要 こちらの記事 を拝見させていただき、これは便利と、JUnit から DBUnit を使用してテストすることを考えました。しかしながら、下記構成にて JUnit からテストを実施した際、Flyway にて作成されているはずの、schema_version テーブルを DBUnit が確認できない現象が発生しました。 Spring Boot JUnit |---> Flyway (マイグレーションの DDL を実行) |---> DBUnit (単体テスト用の CSV を投入) 現象の詳細 DBUnit で使用する TransactionAwareDatasourceProxy をコンテナに登録しています。 @Te
追記 2017/11/2 RestTemplateのテスト追加 この資料について Spring bootを使ったプロジェクトをやっていて、その際にテストどう書くねんってなったからまとめた この資料では下記のテストの仕方をまとめた Service(POJOっぽいやつ) Controller(Mockかして順序とかの担保) Repository(CSVでテストデータ用意してテスト) リクエストパラメータのテスト(バリデーションを実際にしてみてテスト) RestTemplateをつかって外部のAPIたたくクライアントクラスのテスト 機能テスト(実際に叩いてテスト) 基本調べて書いたのでもっとこうしたほうがきれいにかけるやで、っていうのがあればぜひ 実行環境 Java 1.8 SpringBoot 1.5.7.RELEASE 詳しくは下記のリポジトリ参照 ここでやったことのコード spring-b
こんにちは。10分で生産的なミーティングができるWeb会議ツールminmeetingを開発している伊勢川です。 本日は若干マニアックだけど誰もが一度はハマったことがある、ExcelでCSVを扱う際の文字化け問題を解消するもう一つの方法を紹介します。 DBUnitを用いてテストをしている場合、CSVでデータを作るのが便利です。データが少ないうちはテキストエディタで十分なのですが、テストケースが増えてくるとExcelのオートフィルや関数の機能を使ってデータを作りたくなってきます。 ところがExcelを使うと、データの中に日本語が入っていると文字化けしてしまいます。また、関数を使った瞬間に拡張子をxlsxに変えろとか、つれないことを言ってきます。WindowsではBOMをつければ開けますが、Macでは文字コードまで変えなければならず、だんだん面倒くさくなってきます。 最近気づいたのですが、このよ
DBUnitを使用した結合試験データの積み込み 先日JBehaveを使った試験の自動化について書きましたが(JBehave+Maven+Eclipseを使った結合試験の自動化)、データベースの準備はテキストでやっていくのはきついので、DBUnitでデータを積み込みます。 準備 データをExcelで定義する 以下のルールを守るだけです。 1ファイルに複数のテーブルの情報を定義できるため、シナリオ試験のデータをまとめるのにちょうど良いです。 1テーブル1シート 1ファイルには複数のテーブルの情報を定義できる シートの名前はテーブル名にする 1行目はカラム名を記入する xls形式で保存 例)Excelでのデータ定義 pom.xmlの修正 DBUnitを使うための依存情報を追加します。 apache poiはかならず3.2を使います。 ... <dependencies> ... <depende
class YamlGuestbookTest extends PHPUnit_Extensions_Database_TestCase { protected function getDataSet() { return new PHPUnit_Extensions_Database_DataSet_YamlDataSet( dirname(__FILE__)."/_files/guestbook.yml" ); } } protected function createInlineYamlDataSet($yaml) { $meta = stream_get_meta_data($tmp = tmpfile()); fwrite($tmp, $yaml); return new PHPUnit_Extensions_Database_DataSet_YamlDataSet( $meta
ネットの検索結果でチラチラとは見ていたのですが、この度初めて自分でもDBUnitを使ってみました。ネット上のサンプルコードをほとんどそのまま実行しただけですが、私の手元でも簡単にユニットテスト用のDBとデータを準備することができました。 従来、H2 DatabaseはRunScriptで初期化用のスキーマを流し込んでいたのですが、これならJDBCドライバを選ばない気がします。 ※ 他のJDBCドライバでH2 DatabaseのINIT=RunScript相当の機能が可能なのか知りません。 環境 DBUnit 2.5.1 JUnit 4.12 ユニットテストのコード(パクリですが) 以下のような感じです。Excelファイルもデータソースとして使える点は、仕事でプログラムを作る人にとってかなりのアドバンテージな気がします。 import java.io.File; import org.jun
FuelPHP Advent Calendar 2015の6日目を担当する@wataです。昨日は@sharkppさんのNestedSets Model を使って FuelPHP 用コメントボックスパッケージを作った話でした。 本記事ではFuelPHPを用いた開発におけるユニットテスト、特にデータベースまわりに関するテストケースの作成について、保守性の面から色々考えたあれこれを書かせていただければと思います。 FuelPHPのテスト事情 突然ですがみなさん、テスト書いてますか? PHPはとっても柔軟(?)な言語なので、品質を担保するためにはいつでも実行可能で、軽量なテストによって、動作が常に正しいことを検証できることが望ましいとされています。 PHPの場合、テスティングフレームワークとしてはPHPUnitが有名であり、多くのテスト支援のための機能が実装されています。FuelPHPも例外なくP
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く