ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2Unit

S2 EA2.1では、コンテナを使ったテストを簡単に行えるようにするために
S2Unitが組み込まれます。例えば、トランザクションの自動制御を
テストする場合次のようになります。
RequiredAdviceTest-config.xml


<component class="org.seasar.extension.jta.TransactionManagerImpl"/>
<component name="tx/required"
class="org.seasar.extension.tx.RequiredAdvice"/>
<component class="test.org.seasar.extension.tx.TxBeanImpl">
<aspect>tx/required</aspect>
</component>
RequiredAdviceTest.java

RequiredAdviceTest extends S2TestCase {
private static final String PATH="...RequiredAdviceTest-config.xml";
private TxBean txBean_;
private TransactionManager tm_;

protected void setUp() {
include(PATH);
}

public void testInvoke() throws Exception {
assertEquals("1", true, txBean_.hasTransaction());
assertEquals("2", ..., tm_.getStatus());
}
}

S2TestCaseでは、testXxxのたびに、新規のコンテナが用意されます。
また、includeでXMLで設定を読み込むだけではなく、register()で
手動で組み込むこともできます。
フィールドにインターフェース型の変数(txBean_, tm_)を定義しておけば、
コンテナから自動的に取り出してフィールドにセットしてくれます。
これが、かなーり便利です。
自動設定したフィールドは、testXxxが終了すると自動的にクリアされます。
setUpFields()で手動でフィールドに設定することもできます。

protected void setUpFields() {
hoge_ = (Hoge) getComponent(Hoge.class);
}
nullではないフィールド(既に値が設定されている)には、
自動設定はしないようになってます。
testXxxに対応するsetUpXxx,tearDownXxxのメソッド記述すると、
そのテストメソッドだけの準備終了処理を組み込めるので、
これも便利です。
テストを気持ち良く行えるようにするってこともS2の重要なテーマです。