仕様案

今のところ考えている仕様を書いておきます。本質的には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/ にも情報をのせてこうかなあとおもっているとこ。

ま、こんな感じです。なにかフィードバックがあればよろしくです。