!!!S2JUnit4 を使ったテスト http://yakinikunotare.boo.jp/orebase2/sastruts/service_test_by_s2junit4 http://daipresents.com/2009/s2junit4_service_unit_testing/ !!準備 http://eclipse.seasar.org/updates/3.3/ から S2JUnit4 をインストール !!テストクラスの作成 +テストクラスを作成するファイルを右クリック +S2JUnit4 -> テスティングペアを開く +ペアがない場合は、「作成しますか?」と聞かれるので、「はい」 +テストの内容を書く サンプル {{code Java, package sample02.service; import static org.junit.Assert.*; import static org.seasar.framework.unit.S2Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.seasar.framework.unit.Seasar2; import org.seasar.framework.unit.TestContext; import sample02.entity.Dept; @RunWith(Seasar2.class) public class DeptServiceTest { private TestContext ctx; private DeptService deptService; /** * {@link sample02.service.DeptService#findById(java.lang.Long)} のためのテスト・メソッド。 */ //private DataAccessor accessor; @Test public void testFindById() { // System.out.println("hello"); // fail("まだ実装されていません"); //accessor.readXlsAllReplaceDb("DeptServiceTest_testFindById.xls"); Dept dept = deptService.findById(new Long(90000)); assertNull(ctx.getTestMethodName() + ":データが存在しない場合", dept); dept = deptService.findById(new Long(90001)); assertEquals(ctx.getTestMethodName() + ":データが存在する場合", ctx.getExpected(), dept); } } }} !!テストの実行 ファイルを選択して ctrl+0 メニューから選んでもいいけど、バグがあるらしく「テストケースを選択してください」っと表示されて進まないことがある。 普通にJUnitテストを選んでもいけると思う。 !!テストデータについて !命名規則 s2junit4.dicon にテストデータの命名規則が書いてある。基本的には 初期データは、テストクラス名_テストメソッド名.xls 実行後(期待される)データは、は、テストクラス名_テストメソッド名_Expected.xls また、初期データは テストクラス名.xls としてまとめても良い。 accessor.readXlsAllReplaceDb("DeptServiceTest_testFindById.xls"); で、テストの前にメソッド名やクラス名と関係のないファイルを読み込むこともできる。 !データの内容のルール 以下の様な決まりがあるので注意。 *sheet名に対象のテーブル *1行目にカラム名 *2行目移行にデータ !データファイルのパス 基本的にはテストクラスと同じ場所にxlsファイルを置く。 環境によっては、テストクラスと同じ場所に置いても読み込んでくれないことがある。 1階層戻って、 target ディレクトリ以下に置けば読みこんでくれるはず。 例えば、テスト対象とテストクラスが struts_sample02\src\main\java\sample02\service\DeptService.java struts_sample02\src\test\java\sample02\service\DeptServiceTest.java の場合 struts_sample02\target\test-classes\sample02\service にテストのデータ(xls)ファイルを置いてしまう。 !!テストを実際に行なっているパスを知る System.out.println(getClass().getResource("").getPath()); をテストクラスに書くと実際にテストを行なっているパスがわかる。 !!テストの前にテーブルの中をテストデータに置き換える {{code Java, TestContext ctx; public void before() { ctx.setPreparationType(PreparationType.ALL_REPLACE); } }} こうすることで、すべて置き換わる。 テスト後はロールバックするので元に戻る。 {{category2 プログラミング言語,Servlet & Struts}}