Spring-MVCプラグイン機能追加1(テストケース)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
2008/01/15からのアクセス回数 &counter;
#contents
* Spring-MVCプラグイン機能追加(テストケース) [#a8a163c0]
Spring-MVC用archeTypeプラグインには、単体テスト用のひな形...
1.1.0版でテストケースを取り込みました。
** Spring-MVCプラグイン1.1.0のインストール [#b55bf04e]
Spring-MVCプラグインの1.1.0のインストールには以下の4ファ...
- archeTypeプラグインjarファイル
#ref(spring-mvc-archetype-1.1.0.jar);
- archeTypeプラグインpomファイル
#ref(spring-mvc-archetype-1.1.0.pom);
- GenMVCプラグインjarファイル
#ref(maven-GenMVC-plugin-1.1.0.jar);
- GenMVCプラグインpomファイル
#ref(maven-GenMVC-plugin-1.1.0.pom);
上記の添付ファイルをダウンロードしてください。近々公開用...
- 次に以下のコマンドを実行してください。
#pre{{
mvn install:install-file \
-Dfile=./spring-mvc-archetype-1.1.0.jar \
-DgroupId=jp.co.pwv.spring-mvc-archetype \
-DartifactId=spring-mvc-archetype \
-Dversion=1.1.0 \
-DpomFile=./spring-mvc-archetype-1.1.0.pom \
-Dpackaging=jar
mvn install:install-file \
-Dfile=./maven-GenMVC-plugin-1.1.0.jar \
-DgroupId=org.apache.maven.plugins \
-DartifactId=maven-GenMVC-plugin \
-Dversion=1.1.0 \
-DpomFile=./maven-GenMVC-plugin-1.1.0.pom \
-Dpackaging=jar
}}
** テストケースで追加されたファイル [#vf21bddd]
テストケースで追加されたファイルは以下の通りです。
#ref(fileTree.jpg);
- test/java/example/test/TestCase.java
JUnit用のjavaクラスファイルです。
- test/resources/WEB-INF/applicationContext.xml
- test/resources/WEB-INF/custom-editor.xml
- test/resources/WEB-INF/servlet-def.xml
- test/resources/WEB-INF/servlet-stub.xml
- test/resources/WEB-INF/hbm-dir/Member.hbm.xml
これらは、main/webapp/WEB-INFのファイルと同じものを使用し...
''特にapplicationContext.xml, servlet-stub.xmlはGenMVCプ...
変更されますので、test/resourcesへのコピーが必要です。''
- test/resources/WEB-INF/db-def.xml(変更あり)
JUnit用に以下の定義を追加しました。
#pre{{
<!-- TransactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTran...
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- DbUnitHelperDao -->
<bean id="dbUnitHelperDao"
class="jp.co.pwv.utils.DbUnitHelperDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
}}
transactionManagerは、AbstractTransactionalSpringContextT...
dbUnitHelperDaoは、DbUnitHelperDaoが必要とします。
DbUnitHelperDaoは、テストデータのdump, resotoreとprintメ...
GenMVCプラグインで新たにManagerクラスを追加した場合には、...
#pre{{
dbUnitHelperDao.addHelper(memberManager.getHelper());
}}
addHelperでManagerクラスのhelperを追加登録してください。
- test/resources/WEB-INF/jdbc.properties.xml(変更あり)
単体テストでは、デバッグ時にデータベースの状態を確認する...
HSQLDBのサーバ機能を使用するように変更しました。
#pre{{
# サーバとして使用する場合
db.url=jdbc:hsqldb:hsql://localhost
}}
HSQLDBのインストールは、http://www.pwv.co.jp/take_public_...
を参照してください。
- test/resources/dump.xml(新規追加)
DBUnitのFlatXmlDataSet形式のテストデータ記述ファイルです。
dump.xmlの内容は、
#pre{{
<?xml version="1.0" encoding="Windows-31J"?>
<dataset>
<T_MEMBER
address='Nakano-ku'
id='1'
name='Hiroshi TAKEMOTO'/>
</dataset>
}}
のようなテーブル名をタグとし、フィールド名を属性とするXML...
- test/resources/testdata-def.xml(新規追加)
単体テストでは、検証用のデータをプログラムで用意する必要...
非常に面倒なので、Springの機能を使って検証用テストデータ...
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-...
<beans>
<bean id="expectedMember" class="example.test.domain.Mem...
<property name="id" value="1" />
<property name="name" value="Hiroshi TAKEMOTO" />
<property name="address" value="Nakano-ku" />
</bean>
</beans>
}}
** ひな形の作成 [#kb6a3c0e]
最初のバージョンと変更となるはarchetypeVersionだけです。
例題は、
#pre{{
mvn archetype:create \
-DgroupId=example.test \
-DartifactId=test \
-DarchetypeArtifactId=spring-mvc-archetype \
-DarchetypeGroupId=jp.co.pwv.spring-mvc-archetype \
-DarchetypeVersion=1.1.0
}}
となります。
** 単体テストの実行 [#f392e208]
- HSqlDBのサーバ
HSqlDBのサーバを起動します。HSqlDBをインストールしたディ...
#pre{{
cd $HSQLDB_HOME/demo
./runServer.sh
}}
Windowsの場合には、runServer.batを使用してください。
- mvnでのテスト
次にmvnで単体テストを実行します。
#pre{{
mvn test
}}
と
#pre{{
[INFO] Scanning for projects...
[INFO] --------------------------------------------------...
....
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running example.test.TestCase
....
MEMBER: ADDRESS='Nakano-ku' ID=1 NAME='Hiroshi TAKEMOTO'
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time el...
Results :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
....
}}
のように出力され、Tests run: 3で、3つのテストケースを実...
分かります。
** テストケースについて [#xbf14bcf]
*** 設定の前準備 [#u49ec2c0]
- TestCaseの選択
データベースを扱っているため、テストの影響がないようにAbs...
- Spring設定ファイル
Springの設定ファイルは、getConfigLocationsメソッドで返す...
#pre{{
public String[] getConfigLocations() {
return new String[] {
"WEB-INF/applicationContext.xml",
"WEB-INF/custom-editor.xml",
"WEB-INF/db-def.xml",
"WEB-INF/servlet-def.xml",
"WEB-INF/servlet-stub.xml",
"testdata-def.xml"
};
}
}}
- 各テストでの開始と終了の処理
各テストでの開始の処理をonSetUpInTransactionで、終了の処...
#pre{{
public void onSetUpInTransaction() throws Exception {
super.onSetUpInTransaction();
memberManager = (MemberManager)getApplicationContext()....
dbUnitHelperDao = (DbUnitHelperDao)getApplicationContex...
dbUnitHelperDao.addHelper(memberManager.getHelper());
}
public void onTearDownInTransaction() throws Exception {
super.onTearDownInTransaction();
}
}}
*** memberManager(Daoのテスト) [#de284dd9]
Daoのテストの例をtestFindByIdメソッドに示します。
- dbUnitHelperDaoのresotreメソッドでデータベースにテスト...
- DaoのfindByIdメソッドでmemberを取得します。
- assertEqualsで値の確認をします。
通常はこのようにしますが、helperのprintメソッド使う方法も...
testFindByIdメソッドは、以下の通りです。
#pre{{
public void testFindById() {
dbUnitHelperDao.restore("src/test/resources/dump.xml");
Member member = memberManager.findById(new Integer(1));
assertEquals("Hiroshi TAKEMOTO", member.getName());
assertEquals("Nakano-ku", member.getAddress());
// or you can check using IMember.print method.
Member expectedMember = (Member)getApplicationContext()...
System.out.println(memberManager.print(member));
assertEquals(memberManager.print(expectedMember), membe...
}
}}
*** EditMemberController(コントローラのテスト) [#xcde89d9]
EditMemberControllerのテストには、MockHttpServletRequest...
- 第1引数でPOSTまたはGETを指定し、第2引数にURLを指定します
- addParameterメソッドでパラメータを追加します
- editMemberControllerをApplicationContextから取得し、han...
- handleRequestの戻り値としてModelAndViewが返されます
- ModelAndViewからビューの名前とモデルからmemberの値を確...
testEditMemberControllerは、以下の通りです。
#pre{{
public void testEditMemberController() {
dbUnitHelperDao.restore("src/test/resources/dump.xml");
MockHttpServletRequest req = new MockHttpServletRequest...
req.addParameter("id","1");
EditMemberController editMemberController = (EditMember...
ModelAndView mv = null;
try {
mv = editMemberController.handleRequest(req,new MockHt...
} catch (Exception err) {
err.printStackTrace();
}
Member expectedMember = (Member)getApplicationContext()...
assertEquals("redirect:memberops/list.htm", mv.getViewN...
Member member = (Member)mv.getModel().get("member");
assertEquals(memberManager.print(expectedMember), membe...
}
}}
** 簡単単体テスト [#z25f1e26]
単体テストを記述することは最初は億劫ですが、一度ひな形が...
他のテストが簡単にできるので、テストケースのひな形を使っ...
** コメント [#gcda2a35]
この記事は、
#vote(おもしろかった[3],そうでもない[2],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[FrontPage]]
2008/01/15からのアクセス回数 &counter;
#contents
* Spring-MVCプラグイン機能追加(テストケース) [#a8a163c0]
Spring-MVC用archeTypeプラグインには、単体テスト用のひな形...
1.1.0版でテストケースを取り込みました。
** Spring-MVCプラグイン1.1.0のインストール [#b55bf04e]
Spring-MVCプラグインの1.1.0のインストールには以下の4ファ...
- archeTypeプラグインjarファイル
#ref(spring-mvc-archetype-1.1.0.jar);
- archeTypeプラグインpomファイル
#ref(spring-mvc-archetype-1.1.0.pom);
- GenMVCプラグインjarファイル
#ref(maven-GenMVC-plugin-1.1.0.jar);
- GenMVCプラグインpomファイル
#ref(maven-GenMVC-plugin-1.1.0.pom);
上記の添付ファイルをダウンロードしてください。近々公開用...
- 次に以下のコマンドを実行してください。
#pre{{
mvn install:install-file \
-Dfile=./spring-mvc-archetype-1.1.0.jar \
-DgroupId=jp.co.pwv.spring-mvc-archetype \
-DartifactId=spring-mvc-archetype \
-Dversion=1.1.0 \
-DpomFile=./spring-mvc-archetype-1.1.0.pom \
-Dpackaging=jar
mvn install:install-file \
-Dfile=./maven-GenMVC-plugin-1.1.0.jar \
-DgroupId=org.apache.maven.plugins \
-DartifactId=maven-GenMVC-plugin \
-Dversion=1.1.0 \
-DpomFile=./maven-GenMVC-plugin-1.1.0.pom \
-Dpackaging=jar
}}
** テストケースで追加されたファイル [#vf21bddd]
テストケースで追加されたファイルは以下の通りです。
#ref(fileTree.jpg);
- test/java/example/test/TestCase.java
JUnit用のjavaクラスファイルです。
- test/resources/WEB-INF/applicationContext.xml
- test/resources/WEB-INF/custom-editor.xml
- test/resources/WEB-INF/servlet-def.xml
- test/resources/WEB-INF/servlet-stub.xml
- test/resources/WEB-INF/hbm-dir/Member.hbm.xml
これらは、main/webapp/WEB-INFのファイルと同じものを使用し...
''特にapplicationContext.xml, servlet-stub.xmlはGenMVCプ...
変更されますので、test/resourcesへのコピーが必要です。''
- test/resources/WEB-INF/db-def.xml(変更あり)
JUnit用に以下の定義を追加しました。
#pre{{
<!-- TransactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTran...
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- DbUnitHelperDao -->
<bean id="dbUnitHelperDao"
class="jp.co.pwv.utils.DbUnitHelperDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
}}
transactionManagerは、AbstractTransactionalSpringContextT...
dbUnitHelperDaoは、DbUnitHelperDaoが必要とします。
DbUnitHelperDaoは、テストデータのdump, resotoreとprintメ...
GenMVCプラグインで新たにManagerクラスを追加した場合には、...
#pre{{
dbUnitHelperDao.addHelper(memberManager.getHelper());
}}
addHelperでManagerクラスのhelperを追加登録してください。
- test/resources/WEB-INF/jdbc.properties.xml(変更あり)
単体テストでは、デバッグ時にデータベースの状態を確認する...
HSQLDBのサーバ機能を使用するように変更しました。
#pre{{
# サーバとして使用する場合
db.url=jdbc:hsqldb:hsql://localhost
}}
HSQLDBのインストールは、http://www.pwv.co.jp/take_public_...
を参照してください。
- test/resources/dump.xml(新規追加)
DBUnitのFlatXmlDataSet形式のテストデータ記述ファイルです。
dump.xmlの内容は、
#pre{{
<?xml version="1.0" encoding="Windows-31J"?>
<dataset>
<T_MEMBER
address='Nakano-ku'
id='1'
name='Hiroshi TAKEMOTO'/>
</dataset>
}}
のようなテーブル名をタグとし、フィールド名を属性とするXML...
- test/resources/testdata-def.xml(新規追加)
単体テストでは、検証用のデータをプログラムで用意する必要...
非常に面倒なので、Springの機能を使って検証用テストデータ...
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-...
<beans>
<bean id="expectedMember" class="example.test.domain.Mem...
<property name="id" value="1" />
<property name="name" value="Hiroshi TAKEMOTO" />
<property name="address" value="Nakano-ku" />
</bean>
</beans>
}}
** ひな形の作成 [#kb6a3c0e]
最初のバージョンと変更となるはarchetypeVersionだけです。
例題は、
#pre{{
mvn archetype:create \
-DgroupId=example.test \
-DartifactId=test \
-DarchetypeArtifactId=spring-mvc-archetype \
-DarchetypeGroupId=jp.co.pwv.spring-mvc-archetype \
-DarchetypeVersion=1.1.0
}}
となります。
** 単体テストの実行 [#f392e208]
- HSqlDBのサーバ
HSqlDBのサーバを起動します。HSqlDBをインストールしたディ...
#pre{{
cd $HSQLDB_HOME/demo
./runServer.sh
}}
Windowsの場合には、runServer.batを使用してください。
- mvnでのテスト
次にmvnで単体テストを実行します。
#pre{{
mvn test
}}
と
#pre{{
[INFO] Scanning for projects...
[INFO] --------------------------------------------------...
....
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running example.test.TestCase
....
MEMBER: ADDRESS='Nakano-ku' ID=1 NAME='Hiroshi TAKEMOTO'
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time el...
Results :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
....
}}
のように出力され、Tests run: 3で、3つのテストケースを実...
分かります。
** テストケースについて [#xbf14bcf]
*** 設定の前準備 [#u49ec2c0]
- TestCaseの選択
データベースを扱っているため、テストの影響がないようにAbs...
- Spring設定ファイル
Springの設定ファイルは、getConfigLocationsメソッドで返す...
#pre{{
public String[] getConfigLocations() {
return new String[] {
"WEB-INF/applicationContext.xml",
"WEB-INF/custom-editor.xml",
"WEB-INF/db-def.xml",
"WEB-INF/servlet-def.xml",
"WEB-INF/servlet-stub.xml",
"testdata-def.xml"
};
}
}}
- 各テストでの開始と終了の処理
各テストでの開始の処理をonSetUpInTransactionで、終了の処...
#pre{{
public void onSetUpInTransaction() throws Exception {
super.onSetUpInTransaction();
memberManager = (MemberManager)getApplicationContext()....
dbUnitHelperDao = (DbUnitHelperDao)getApplicationContex...
dbUnitHelperDao.addHelper(memberManager.getHelper());
}
public void onTearDownInTransaction() throws Exception {
super.onTearDownInTransaction();
}
}}
*** memberManager(Daoのテスト) [#de284dd9]
Daoのテストの例をtestFindByIdメソッドに示します。
- dbUnitHelperDaoのresotreメソッドでデータベースにテスト...
- DaoのfindByIdメソッドでmemberを取得します。
- assertEqualsで値の確認をします。
通常はこのようにしますが、helperのprintメソッド使う方法も...
testFindByIdメソッドは、以下の通りです。
#pre{{
public void testFindById() {
dbUnitHelperDao.restore("src/test/resources/dump.xml");
Member member = memberManager.findById(new Integer(1));
assertEquals("Hiroshi TAKEMOTO", member.getName());
assertEquals("Nakano-ku", member.getAddress());
// or you can check using IMember.print method.
Member expectedMember = (Member)getApplicationContext()...
System.out.println(memberManager.print(member));
assertEquals(memberManager.print(expectedMember), membe...
}
}}
*** EditMemberController(コントローラのテスト) [#xcde89d9]
EditMemberControllerのテストには、MockHttpServletRequest...
- 第1引数でPOSTまたはGETを指定し、第2引数にURLを指定します
- addParameterメソッドでパラメータを追加します
- editMemberControllerをApplicationContextから取得し、han...
- handleRequestの戻り値としてModelAndViewが返されます
- ModelAndViewからビューの名前とモデルからmemberの値を確...
testEditMemberControllerは、以下の通りです。
#pre{{
public void testEditMemberController() {
dbUnitHelperDao.restore("src/test/resources/dump.xml");
MockHttpServletRequest req = new MockHttpServletRequest...
req.addParameter("id","1");
EditMemberController editMemberController = (EditMember...
ModelAndView mv = null;
try {
mv = editMemberController.handleRequest(req,new MockHt...
} catch (Exception err) {
err.printStackTrace();
}
Member expectedMember = (Member)getApplicationContext()...
assertEquals("redirect:memberops/list.htm", mv.getViewN...
Member member = (Member)mv.getModel().get("member");
assertEquals(memberManager.print(expectedMember), membe...
}
}}
** 簡単単体テスト [#z25f1e26]
単体テストを記述することは最初は億劫ですが、一度ひな形が...
他のテストが簡単にできるので、テストケースのひな形を使っ...
** コメント [#gcda2a35]
この記事は、
#vote(おもしろかった[3],そうでもない[2],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc