S2UnitとS2JUnit4
S2Unit JUnit3向けの拡張機能
S2JUnit4 JUnit4向けの拡張機能
★S2Assertについて 下記の比較は可能
DataSetとDataSet
DataTableとDataTable
DataSetとBean
DataSetとBeanのList
DataSetとBeanのMap
DataSetとEntity
DataSetとEntityのCollection
★TestContextについて 下記の機能を持つ
設定ファイルのインクルード
コンポーネントの登録
設定ファイルの自動インクルード機能の有効/無効の設定
テストの事前データの準備方法の設定
期待値の取得
実行時テストクラス名・テストメソッド名の取得
MockInterceptorの取得
S2JUnit4サンプル
import static org.seasar.framework.unit.S2Assert.*;
import org.junit.runner.RunWith;
import org.seasar.extension.dataset.DataSet;
import org.seasar.framework.unit.Seasar2;
import org.seasar.framework.unit.TestContext;
import org.seasar.framework.unit.DataAccessor;
@RunWith(Seasar2.class)
public class TargetTest{
private TestContext context;
private DataAccessor accessor;
private JdbcManager jdbcManager;
private TargetService service;
private TargetDao dao;
@Before
public void before() {
context.setAutoIncluding(false); //自動インクルード機能を無効に設定
context.include("app.dicon"); //明示的なインクルード
context.register(TargetDaoImpl.class); //コンポーネントの登録
context.setPreparationType(PreparationType.ALL_REPLACE);
}
@TxBehavior(TxBehaviorType.COMMIT)
//@Ignore
public void testCase01() {
String methodName = context.getTestMethodName();
DataTable table = accessor.readDbByTable("User");
DataSet dataSet = accessor.readXls("user.xls");
DataSet expect = context.getExpected();
DataSet result = accessor.readDb(expect);
assertEquals(expect, result);
}
}
※@TxBehavior:ROLLBACK(デフォルト)、COMMIT、NONE
※PreparationType
ALL_REPLACE DBデータを削除してから挿入
WRITE 単に挿入
REPLACE 一致する行は更新し、それ以外の行を挿入
NONE
トランザクションを利用するメソッドに対して、要注意
@Test
@TxBehavior(TxBehaviorType.NONE)
public void testMethod() {
xxx.execute();
}
@TransactionAttribute(TransactionAttributeType.REQUIRE_NEW)
public void execute() {
...
}
DBデータを変更する際
@Test
@TxBehavior(TxBehaviorType.COMMIT)
public void testMethod() {
jdbcManager
.updateBySql("UPDATE table SET name=? WHERE no=?",
String.class, String.class)
.param("Andy", "101").execute();
}
★s2junit4.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components namespace="s2junit4">
<component name="context"
class="org.seasar.framework.unit.impl.InternalTestContextImpl"/>
<component class="org.seasar.framework.unit.impl.DataAccessorImpl"/>
<component class="org.seasar.framework.unit.impl.ConfigFileIncluderImpl">
<initMethod name="addConfigFile">
<arg>"app.dicon"</arg>
</initMethod>
<initMethod name="addConfigFile">
<arg>context.testClassShortName + ".dicon"</arg>
</initMethod>
</component>
<component class="org.seasar.framework.unit.impl.TestDataPreparerImpl">
<initMethod name="addTestDataXlsPath">
<arg>
context.testClassShortName + "_" + context.testMethodName + ".xls"
</arg>
</initMethod>
<initMethod name="addTestDataXlsPath">
<arg>context.testClassShortName + ".xls"</arg>
</initMethod>
</component>
<component class="org.seasar.framework.unit.impl.ExpectedDataReaderImpl">
<initMethod name="addExpectedDataXlsPath">
<arg>
context.testClassShortName + "_" + context.testMethodName +
"_Expected" + ".xls"
</arg>
</initMethod>
</component>
</components>
※DBにテストデータを登録するのは便利