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にテストデータを登録するのは便利