S2Unit
S2 EA2.1では、コンテナを使ったテストを簡単に行えるようにするために
S2Unitが組み込まれます。例えば、トランザクションの自動制御を
テストする場合次のようになります。
RequiredAdviceTest-config.xml
RequiredAdviceTest.java
<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>
S2TestCaseでは、testXxxのたびに、新規のコンテナが用意されます。
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());
}
}
また、includeでXMLで設定を読み込むだけではなく、register()で
手動で組み込むこともできます。
フィールドにインターフェース型の変数(txBean_, tm_)を定義しておけば、
コンテナから自動的に取り出してフィールドにセットしてくれます。
これが、かなーり便利です。
自動設定したフィールドは、testXxxが終了すると自動的にクリアされます。
setUpFields()で手動でフィールドに設定することもできます。
nullではないフィールド(既に値が設定されている)には、
protected void setUpFields() {
hoge_ = (Hoge) getComponent(Hoge.class);
}
自動設定はしないようになってます。
testXxxに対応するsetUpXxx,tearDownXxxのメソッド記述すると、
そのテストメソッドだけの準備終了処理を組み込めるので、
これも便利です。
テストを気持ち良く行えるようにするってこともS2の重要なテーマです。