仕様案
今のところ考えている仕様を書いておきます。本質的にはQuick JUnitの拡張です。
テスト対象クラス、テストクラス、テストdiconをショートカットキーで行き来したり、テスト、デバッグ実行したりできるようにします。
キーバインディングはQuick JUnitにあわせます。なのでQuick JUnitとの同居は推奨しません。あとS2Unitは対象外です。
生成するテストクラスの雛形の例も示しておきます。
Doltengでプロジェクトを生成しs2jdbc-gen.build.xmlでgen-entityターゲットを実行すると、以下のようなServiceが生成されます。
package aaa.service; import aaa.entity.Dept; import java.util.List; import static aaa.entity.DeptNames.*; import static org.seasar.extension.jdbc.operation.Operations.*; /** * {@link Dept}のサービスクラスです。 * * @author S2JDBC-Gen */ public class DeptService extends AbstractService<Dept> { /** * 識別子でエンティティを検索します。 * * @param id * 識別子 * @return エンティティ */ public Dept findById(Long id) { return select().id(id).getSingleResult(); } /** * 識別子とバージョン番号でエンティティを検索します。 * * @param id * 識別子 * @param versionNo * バージョン番号 * @return エンティティ */ public Dept findByIdVersion(Long id, Integer versionNo) { return select().id(id).version(versionNo).getSingleResult(); } /** * 識別子の昇順ですべてのエンティティを検索します。 * * @return エンティティのリスト */ public List<Dept> findAllOrderById() { return select().orderBy(asc(id())).getResultList(); } }
これをベースにテストクラスを生成すると、下記のようになります。
package aaa.service; import static org.seasar.framework.unit.S2Assert.*; import org.junit.runner.RunWith; import org.seasar.framework.unit.Seasar2; @RunWith(Seasar2.class) public class DeptServiceTest { private DeptService deptService; public void testFindById() { fail("Not yet implemented"); } public void testFindByIdVersion() { fail("Not yet implemented"); } public void testFindAllOrderById() { fail("Not yet implemented"); } }
最初からRunWithアノテーション、static import、バインディングフィールドができてます。Daoの場合も同様にprivate 〜Dao 〜Dao;とします。
TestContextとDataAccessorをバインディングフィールドとして入れたほうがいいのかはわからんですが、とりあえず含めないでもいいのかな。
あとはCtrl+0でメソッドごとに実行できます。メソッド名がtestで始まってなくても実行できます。
ちなみにQuick JUnitだと以下のようになります。
package aaa.service; import static org.junit.Assert.*; import org.junit.Test; public class DeptServiceTest { @Test public void testFindById() { fail("Not yet implemented"); } @Test public void testFindByIdVersion() { fail("Not yet implemented"); } @Test public void testFindAllOrderById() { fail("Not yet implemented"); } }
S2JUnit4に特化しているので多少は便利になるんじゃないでしょうか。ま、どこまでニーズがあるかはちょっと謎ですが(笑)。
Quick JUnitに無いけどあると便利かなって思った機能はfindByIdメソッドの行でCtrl+9するとtestFindByIdメソッドに飛ぶってこと。逆もね。
ただfindByIdが必ずtestFindByIdに結びついている訳じゃないからちょっと考え中。決めうちでもいい気がしてるけど、ファーストバージョンには含めない予定。
リリース予定はとりあえず年内が目標かな。
https://keyaki.tsukuba-bunko.org/projects/s2junit4/trac/ にも情報をのせてこうかなあとおもっているとこ。
ま、こんな感じです。なにかフィードバックがあればよろしくです。