Sample : Samcの自動試験を行う - SAMCUnit
JUnitを利用してServer Application Management Consoleトランザクションを試験するためのToolで、 SamcUnitというものがあります。
SamcUnitを使う前提条件↑top
下記のモジュール類が必要になります。
実行時に利用するモジュール
-
ToolClient.jar
-
ToolClientの本体です。 このjarにSamcUnitのコアとなる通信部分があります。 -
samcunit-*.jar
-
上記SamcUnitのコアだけでは不便なため、 便利に利用できるようにするためのLibrary類です。 →モジュール/ソース -
junit-*.jar
-
SamcUnitが依存する単体試験ツールです。junit.orgより入手できます。mavenを使用する場合は下記の定義で依存関係を解決できます。 -
dbunit-*.jar
-
SamcUnitが依存する、JUnitから利用できるDB操作ツールです。 SamcUnitの試験前のDBデータの初期化や、 SmacUnitの試験後のDBデータの評価に使用します。 dbunit.org より入手できます。 mavenを使用する場合は下記の定義で依存関係を解決できます。
ToolClient.jarに含まれるSamcUnitのコアClassについて↑top
ToolClient.jarに含まれるSamcUnitのコアとして以下があります。
- jp.ne.mki.wedge.junit.samc.SamcRunner
- jp.ne.mki.wedge.junit.samc.SamcTestConstants
この中でも「SamcRunner」Classが実際にServer Application Management Consoleを実行するClassとなります。
SamcRunner↑top
コンストラクタ
引数なしのコンストラクタと引き数ありのコンストラクタが存在します。 引数の有無は「使用するRunClient.wdgのファイル名の指定」で、 この値が設定されていない場合はデフォルトの「conf/RunClient.wdg」が使用されます。
setTraceMode()
Server Application Management Console実行時にTraceモードで実行するかどうかを設定します。 これが設定されている場合はServer Application Management Console環境に詳細なログが出力されます。 Server Application Management ConsoleのTraceログ出力機能をOnにするだけですから、 SamcUnitを実行した環境に出力されるわけではありません。
execute()
このメソッドを実行することでServer Application Management Console環境で実際にServer Application Management Consoleが実行されます。 Server Application Management Console物理名称、トランザクション物理名称を引数に指定する必要があります。
SamcTestConstants↑top
ItemType
アイテムタイプを意味する定数です。
ItemType
- ItemType.TEXT
- ItemType.COLUMN
ControlRecordIndex
Server Application Management Consoleとの通信の制御に使用されるデータ領域の取得に使用されます。 それぞれが意味するもの詳細は [製品Class] jp.ne.mki.wedge.rule.common.other.GetControlRecordValue を参考にしてください。
ControlRecordIndexで良く使うもの
- SERVERSTATUS
- SERVERMESSAGE
- DETAILMESSAGE
- DBERRORCODE
- DBSTATUS
- DBERRORMESSAGE
- UPDATETARGETCOUNT
ServerStatus
Server Application Management Consoleとの通信の実行結果として返される値の定義です。 Server Application Management Console実行後に返却される値は下記のリストに書かれた3種類のみです。
必要となる3種類の値
- OK
- ERROR
- USER_ERROR
samcunit-*.jarに含まれるSamcUnit用Library(SamcUnit拡張)について↑top
SmacUnitのコアモジュールだけを利用してTestCaseを囲うとすると、 「In/Outの設定」「Outの評価」等で使用する設定値や期待値を ソースコードに直接埋め込む必要が出てきて不便です。 そこで、それらを外部のXMLファイルとして定義しておき、 そのXMLファイルを使って「In/Outの設定」「Outの評価」を簡単に 行えるようにしたSamcUnit拡張機能を作成しました。
SmacUnitLibrary↑top
setupRunner()
In/Outや、OptionalData等を記述したXMLデータを利用して SamcRunnerオブジェクトを初期化します。ここでいう初期化とは、 XMLで表現された「InRecord」「OutRecord」「OptionalData」 を解析し、SamcRunnerオブジェクトに設定する作業を指しています。
assertOutRecords()
実行後のSamcRunnerのOutRecordが、 XMLで記述された期待される値と同じかどうかを評価します。 評価はorg.junit.Assert#assertEqualsまたは org.junit.Assert#assertArrayEqualsを使用していますので、 期待した結果で無い場合はそれらのメソッドから java.lang.AssertionErrorがthrowされます。
assertServerStatus()
Server Application Management Console実行後の返り値を評価します。
使用するXMLファイルの書式について↑top
基本的にはitems要素をRootとして、アイテムに対応するitem要素、 そのアイテムが持つ値、を定義します。 単純な書式ですが、 nullと空文字の違いを表現するために特殊な記述を使用しています。 dbunitのXmlDataSetの表現方法と同じ形式です。
サンプル↑top
SamcUnitの実行方法↑top
Eclipseを使用している場合はIDEの機能を使用してJUnitTestCaseを実行する方法が楽です。
IDEを使用せずにJUnitでのテストを実行する方法として、 junitに標準で含まれるTestRunenrを使用する方法もあります。 下記は TestRunnerを使用した実行のバッチファイルのサンプルです。
CLASSPATHは適宜変更してください。
DbUnitとの連携↑top
DbUnitを便利に使うためのいくつか機能をラッパとして用意しています。 ソースも公開していますから、足りない場合は独自に追加して使用してください。
DbUnitLibrary↑top
createConnection
DbUnitLibraryの機能を利用する前にJDBC接続の情報を指定して javax.sqlのConnectionObjectを初期化しておく必要があります。 内部では、同時にDbUnit用のConnectionオブジェクトも生成しています。
executeOperation
DBUnitのDatabaseOperationを実行するラッパを用意しています。
assertDatabase
XmlDataSetと現在のDatabaseの内容のAssertを行う機能です。
executeSql
DbUnitの機能ではありませんが、Sqlを実行する機能です。
サンプル↑top
「tableInit」メソッドでデータベースを初期化してから、 「Insert_1件追加」メソッドでServer Application Management Consoleトランザクションを実行しています。 さらに、Server Application Management Consoleトランザクションの実行後にデータベースに対して発行したクエリ結果が 想定しているクエリ結果が同じかどうかの評価も行っています。