3. Javaアプリケーションのテスト作成

3.1. テスト仕様書Excelの起動

../_images/selectDic.png

最初に起動すると、コントロール辞書の設定を促すメッセージが表示されます。 直後に開かれるファイルダイアログで、コントロール辞書ファイルを設定します。 コントロール辞書は、後に変更することができます。ここで選択しない場合、ファイルの再起動が必要になります。

../_images/startJavaExcel.png

起動直後には、著作権が表示されます。

3.2. テスト仕様書シートの作成

../_images/menuNewJavaTest.png

クイックアクセスツールバ―から、「新しくテストを作成する」を選択します。

../_images/newSheet.png

「NewSheet」と名付けられたシートが生成されます。

※ 既存のシートをExcelの機能によりコピーして作成した場合には、以下を手動で行ってください。

  1. 「レイアウトを走査する」を実行する。

  2. ReservedDicシートにおけるコピー元の情報を元に、新規シートの情報を追加する。



3.3. メソッドの読み込み

3.3.1. クラスファイルから読み込む

クラスファイル(.java)から、テストするメソッドの情報を読み取る手順を説明します。

../_images/readClass1.png

クイックアクセスツールバ―から、「クラスファイルを読み込む」を選択すると、クラスメソッドの情報を読み取るためのダイアログが開きます。

../_images/readClass2.png

クラス名を指定し、テストするメソッドを選択します。

../_images/initialClassSheet.png

メソッドの引数および返却値の情報がExcelファイルに転記されます。

3.3.2. 

3.3.3. Json記法について

FTにおけるJavaテストにおいては、ほとんどのオブジェクトの設定はJson記法により行います。

システムのセキュリティマネージャーがアクセス制限しているprivateフィールドを直接設定することはエラーとなる可能性があります。 Java9以降、java.*のようなシステムクラスのFieldの場合、その恐れがあります。 但し、アプリケーション独自のクラスの場合、独自のセキュリティマネージャでアクセス制限をかけていない限り、特に問題にならないと思われます。

3.4. メソッド実行前の準備

メソッドの引数が基本型もしくは文字列である場合には、ここでの準備は不要です。

それ以外の場合、実行時には引数のクラスを用いてインスタンスを生成する必要があります。その際の、デフォルト値を設定します。デフォルト値は、クラス単位で共通化することも可能です。また、TestSuite単位(シート)で共通化することもできます。

3.4.1. デフォルト値のJsonを設定する(レベル1)

配列もしくはクラスインスタンスの初期値をJsonとして、オブジェクト辞書のReservedDicシートもしくは現在編集中のReservedDicシートに記述することができます。

初期値をクラスで共通化することにより、TestSuiteシートにおける作業は、そのインスタンスの一部の属性を設定することだけになります。

例えば、「com.foo.Sample」クラスに標準的なJsonは、

A列

B列

com.foo.Sample

#fieldA

Json形式による属性Aの値の指定

#fieldB

Json形式による属性Bの値の指定

のように、「com.foo.Sample」の属性を記述していきます。

このような標準的なJsonはプロジェクトの標準化を担当するアーキテクトが行った方が効率的な場合が多いでしょう。属性値の標準値を定めることで、開発者の負担を軽減することができます。

一方、クラスインスタンスの初期値をTestSuite独自に設定することもあるでしょう。その場合には、次のように設定します。

A列

B列

AAA.$n

#class

com.foo.Sample

#fieldA

Json形式による属性Aの値の指定

この設定がクラス属性の標準値と重複している場合、TestSuiteによる指定が優先されます。(例に記されている「AAA.$n」は、「AAA」シートでテスト対象にしているメソッドのn番目の引数を意味します)

3.4.2. 初期オブジェクトの生成コードを設定する(レベル2)

引数のクラスにデフォルトコンストラクタがない場合には、インスタンスをJavaロジックで生成します。TestSuiteのシートにおいて、引数の位置を示すセルで右クリックメニューを開き、

../_images/popmenu_javainitialize.png

「初期化方法」を選択します。

../_images/javainitdialog.png

生成ソース欄に、オブジェクトを生成して返すコードを記述します。 結果は、ReservedDicシートの「シート名.$n」(nは引数の位置)の#initialize行に反映されます。

※ #initialize行のコードでは生成したオブジェクトを必ず「return」する必要があります。

※ このコードでクラス宣言する際にはFQN(パッケージ名付きクラス名)を使用する必要があります。

3.5. メソッド実行時の設定

引数オブジェクトの属性オブジェクトをパスにより指定し、その値を設定します。 属性値の設定にあたっては、Jsonもしくはあらかじめ用意しているマクロ(アーキテクト編参照)を使用することができます。

3.5.1. 引数の値や属性値を設定する(レベル1)

3.5.1.1. 属性へのパスを選択する

../_images/popmenu_pathselector.png

「パラメータへのパス」を指定するセルで右クリックメニューを開き、「JsonPath設定」を選択します。

../_images/javapathselector.png

ダイアログの表示された属性名を選択します。配列やリストの場合は、属性名として自然数による位置が表示されます。

※ 全ての配列はObject型として表示されます。

3.5.1.2. 属性値を設定する

JsonPathにより指定した属性に対して、パラメータ値を設定します。

パラメータ値は、Jsonパスで指定された属性のオブジェクトに対して、Jsonを指定します。基本型もしくは文字列の場合には、値を直接指定します。

指定の方法は次のいずれかになります

  • 直接Json書式を記入する

    • 数値や文字列なら、値を直接記述する。

    • 配列なら[,,,]の初期値で記述する

    • オブジェクトやMapならば、{"key":value,...}で記述する。

  • Jsonを生成するマクロを利用する

    • Json生成するマクロ指定する予約キー(x,y,...)

  • オブジェクトの生成を指定するマクロを利用する

    • new オブジェクト生成マクロを指定する予約キー(x,y,...)

オブジェクトの生成マクロは、引数オブジェクトもしくはその属性オブジェクトの設定がコードの実行によって容易に行われる場合に使用します。

※ Jsonの予約キーおよびその記述はReservedDicシートに記述する必要があります。プロジェクトで標準化するJsonマクロはオブジェクト辞書のReservedDicシートに記述します。

※ オブジェクト生成マクロ(Java)の予約キーおよびその記述はReservedDicシートに記述する必要があります。A列は「キー名#initialize」と記述する必要があります。標準化するばあいにはオブジェクト辞書のReservedDicシートに記述します。

詳細は、サンプル(JavaTestSample_XX_XX.xlsm)を参照してください。

※ x,y,...は具体的な文字列、数値、論理値になります。それぞれJavaマクロのコードに(あなたが?)埋め込んだ$arg1,$arg2,...というシンボルに代入されます。これにより、生成するオブジェクトのバリエーションを作ることが容易になります。

3.5.1.3. 属性値のバリエーションを追加する

../_images/popmenu_addvalue2.png

パラメータ値欄のセルで右クリックメニューを開き、「パラメータ欄追加」を選択すると、引数の値/属性値を設定する行が追加されます。

3.5.2. 日付を入力する(レベル1)

文字列として日付を指定する場合、次の三通りの入力方法があります。

  • 指定されたフォーマットで文字列を指定する。

  • FTで提供している日付入力用のマクロを使用する。

書式

#マクロ名(引数)

説明

例1

#本日()

本日の日付を返す

例2

#次曜日(木曜日)

次の木曜日の日付を返す

例3

#以後営業日(/1/1)

1/1以後の最初の営業日の日付を返す

例4

#以前営業日(/1/1)

1/1以前の最初の営業日の日付を返す

などなどが使用可能です。

※ マクロの引数には"を使用しないでください。

※ 日付入力に限らず、文字列入力用のマクロをFTに登録して使うこともできます。(アーキテクト編)

※ Json書式の値に上記マクロを埋め込むことも可能です。

3.5.3. スタブを指定する(レベル2)

初期化するソースを設定するダイアログにおいて、「スタブにする」をチェックします。

※編集モードで実行すると、スタブにした引数のメソッドが呼ばれるタイミングで、その処理のソースコードを編集することができます。この作業は主にアーキテクトがあらかじめ行っておくとよいでしょう。編集モードでの実行は、クイックアクセスメニューの「テストを実行する」を選択する際に、shiftキーを押下します。

スタブの属性は、通常の引数と同様に設定することができます。

※ スタブの属性は、getter、setterのメソッド名から自動生成されます。getterの引数がない場合の属性の型は、getterの返却値と同じです。但し、返却値が基本型の場合、そのラッパー型となります。getterの引数が一つの場合、属性の型はMapとなります。引数をキーとして、返却値を返すようにMapを設定します。

※ スタブのsetter, getterのメソッド実装は、アプリケーション内から呼び出される場合のために生成されます。

※ 名前がget、find、lookup、searchから始まるメソッドはgetterとして扱われます。属性名は「m_data」になります。

※ スタブを作成するためには、環境設定ダイアログにて、作成物を格納するために「偽クラスのルート」を事前に指定しておく必要があります。

3.5.4. データべースや外部プロセスの枠を生成する(レベル1)

../_images/javainitdialog.png

右クリックメニューを開き、「プロセス枠追加」を選択すると、データベースや外部プロセスを利用するための行が追加されます。

3.5.5. SQL文によりデータベースを設定する(レベル2)

  • パラメータへのパス欄

    SQL文(insert/update/delete)を指定します。

    SQL文の中にシンボル$[位置番号]([]を省略しないこと)を埋め込むことが可能です。位置番号は1以上の整数で、設定値欄で指定されたパラメータの位置を指定することにより、SQL文を完成させることができます。

    設定のバリエーションを容易に作り込むことができます。

    書式としては、次の文が可能です。

    • insert into tableName(カラム1,...) values(...)

    • update tableName set カラム1=val1,... where ...

    • delete from tableName [where ...]

  • パラメータ値欄

    SQL文内に埋め込まれたシンボルに代入するパラメータ値をカンマ区切りでつなぎます。 パス欄のSQLが完成形(シンボルがなく、セットする値が指定されている)の場合、「-」を指定します。

3.5.6. 外部コマンドを利用して設定する(レベル2)

右クリックメニューで「コマンド選択」を選択すると、外部プロセスを呼び出すテンプレートを選ぶダイアログが開きます。



3.6. メソッド実行後の検証

3.6.1. メッセージを表示して、人の目視による確認を待つ(レベル1)

自動では難しい判定を、目視で行うための機能です。 評価式のセルに「verify」を記入します。評価値のセルは空のままにしておきます。

テスト実行時には、ダイアログに、次のようなメッセージが表示されます。

1行目

verify! >> 実行中のオブジェクトの値もしくは属性値

2行目以降

上記と比較すべき説明欄の文字列もしくはverify()の()内の文字列

状態がメッセージ通りならば「YES」を、異なっているならば「NO」を押下します。

3.6.2. 引数と返却値を検証する(レベル1)

パラメータへのパス欄で指定した引数や返却値の属性と比較します。

評価式欄の書式:

  • 正規表現

    =~正規表現を指定する文字列

  • 完全一致

    =文字列

  • 大小比較

    =数字

    >数字

    <数字

    >=数字

    <=数字

    ※ 配列、List、Mapと比較する場合、比較演算子の左に「length()」を指定することにより、その要素の数を検証することができます。

    ※ =の右辺が「null」の場合、nullオブジェクトとの比較として処理されます。

3.6.3. 引数もしくは返却値がXML/HTMLの場合の検証(レベル2)

例えば、返却値としてXMLやHTMLを返すメソッドを検証する場合、その一部のタグの部分文字列を正規表現で評価することになります。

例1:=~<input type="hidden" id="foo" value="foo値">

上の例は評価文字列が比較的単純ですが、部分文字列が複雑になると文字列が長くなり、可読性を阻害し、テスト仕様書を分かりにくくするでしょう。

そのため正規表現による評価の場合にもマクロを使用することができます。例えば、上記の例では、ReservedDicシートに、

A列(マクロの予約キー)

B列(展開後の文字列)

FOOVALUE

<input type="hidden" id="$arg1" value="$arg2">

を登録すると、

例2:=~FOOVALUE(foo,foo値)

のように書けて、id="foo"のタグの値が「foo値」かどうか判定する表現になります。マクロの予約キーに意味を持たせることにより、可読性を維持することができます。 引数は任意の数だけ指定できます。n番目の引数は「$argn」と置き換えられます。

3.6.4. 実行後の状態を検証する①:SQL文によりテーブルの状態を検証する(レベル2)

  • パラメータへのパス欄

    SQL文(select)を指定します。

    select文の中にシンボル$[位置番号]([]を省略しないこと)を埋め込むことが可能です。位置番号は1以上の整数で、設定値欄で指定されたパラメータの位置を指定することにより、select文を完成させることができます。

    判定条件のバリエーションを容易に作り込むことができます。

  • 評価式欄

    exists(SQL) :select文による検索結果が空でなければ成功。

を指定します。

  • 設定値欄

    select文内に埋め込まれたシンボルに代入するパラメータ値をカンマ区切りでつなぎます。 パス欄のSQLが完成形(シンボルがなく、セットする値が指定されている)の場合、「-」を指定します。

※ select文にて抽出する項目については、*、count(*)、検索対象のテーブルの項目名を使用します。(*は半角にすること)

3.6.5. 実行後の状態を検証する②:外部プロセスを起動する(レベル2)

オブジェクト辞書に登録されているコマンドライン情報については、右クリックメニューで入力支援が使用できます。

外部プロセスが0を返すなら成功、1以上を返すなら失敗とみなします。

  • パラメータへのパス欄

    外部プロセス呼び出しのコマンドラインを記述します。

  • 評価式欄

    記入する必要はありません。

3.7. その他の操作

3.7.1. データベースに登録する

../_images/quikMenu.png

クイックアクセスツールバーから「データベースに登録する」を選択します。 アクティブなシートがS型もしくはC型であれば、そのシートの情報をデータベースに保存します。

3.7.2. テストを実行する

クイックアクセスツールバーから「テストを実行する」を選択します。 アクティブなシートからデータベースに保存されているパラメータを使用して、テストを実行します。

※ パラメータを変更してテストする場合には、一度、データベースを更新する必要があります。

CIツールからテストを実行する場合、コマンドラインから行うことができます。

java -jar FTのjarfile -nodisplay -testcase:["キーワード","ログファイルのパス",0,0,true] -onlyauto:true

キーワードば、TestSuiteのシート名を指定します。

その他のオプションとしては、

  • -onlyauto:true

Excelにおいて縦列のパラメータの組み合わせの操作と検証でhand()もしくはverify()を含む場合、それをスキップして実行します。夜間バッチなどの自動実行のテストに使用します。

このオプションが指定されない場合、キーワードで指定された全てのテストを実行します。

  • -v:版数 実行時の版数を指定する。

  • -properties:Json形式 SystemプロパティをJson形式で指定する。

があります。

3.7.3. テストを削除する

クイックアクセスツールバーの「データベースから削除する」を選択すると、Activeなシートに対応するテストをデータベースから削除します。

3.7.4. レイアウトを走査する

手でシートのレイアウトを編集した後に、この処理を行います。以後の処理をマクロが正しく実行できるようにするためです。

3.7.5. ブックを移入する

最新版のFTが公開されるタイミングで、旧版のブックを移行する必要が生じる場合があります。そのような場合、クイックアクセスツールバーで「ブックを移入する」を選択すると、旧版の内容を最新版のブックに読み込むことができます。、

3.7.6. 辞書を選択する

辞書を切り替えることができます。

3.7.7. マニュアルを開く

FTのマニュアルサイトを読み込みます。