(for Internet Explorer)
← ▼ ▲
↑
サブフォルダの関数の呼び出し順序
T_SomeTests
Test.vbs
Test.vbs
T_UnitTest1
Test.vbs
T_UnitTest2
Test_current
Test_build
Test_setup
Test_check
Test_clean
12
11
10
ALL テストを行うと、すべての Test.vbs ファイル（起動時のファイル名と同じ名前の
ファイル）の Test_current を読んだ後に、すべての Test.vbsファイルの Test_build を
呼び出す…、と繰り返していきます。
Test_current, Test_build, Test_setup, Test_start は、Tests::AddTestScript した順に、
Test_check, Test_clean は、Tests::AddTestScript した順と逆に呼ばれます。
Tests::AddTestScriptAuto は、親フォルダから追加していくので、
Test_current, Test_build, Test_setup, Test_start は、親フォルダから、
Test_check, Test_clean は、子フォルダから呼ばれます。
Test_start
AddTestScriptAuto
追加順序
２
３
１
数字に書いてある順番に Test_current 関数などがコールバックされます。
ただし、同じ深さの T_UnitTest1 と T_UnitTest2 の順番は変わることがあります。
６
５
４
２
３
１
９
８
７
14
13
15
16
17
18
→ Tests::CurrentTestPriority
Tests::CurrentTestPriority を設定することで、テストの順番を変えることができます。
→ Tests::SetCur
テスト・プロンプトは、サブフォルダにある Test.vbs （起動時のファイル名と同じ名前の
ファイル）も呼び出します。 （TestCommon_Data.xml の
によって実施するテストは制限できます。） その呼び出す順序を説明します。
(ver4) テストに失敗したら、そのテストの続きの関数はコールバックされません。
たとえば、T_UnitTest1 の Test_start 関数内でエラーが発生したら、T_UnitTest1
の Test_check, Test_clean 関数はコールバックされません。
(ver4) テストをスキップしたら、そのテストの続きの関数はコールバックされませんが、
Test_clean 関数はコールバックされます。 たとえば、T_UnitTest1 の Test_start 関数
内で Skip 関数を呼び出したら、T_UnitTest1 の Test_check 関数はコールバックされ
ませんが、T_UnitTest1 の Test_clean 関数はコールバックされます。
関連
(ver4) Test_build 関数と Test_setup 関数と Test_start 関数は、親フォルダーの
テストに失敗があれば、子フォルダーの同じ名前の関数はコールバックされません。
Test_check 関数と Test_clean 関数は、子フォルダーのテストに失敗があれば、
親フォルダーの関数はコールバックされません。
テスト
→ [T_SomeTests] 複数のテストスクリプト
/TestCases/@TestSymbols
← ▼ ▲
他のプログラムを起動する機能のテスト
WaitForFile で待つ
Setting_getEditorCmdLine などを、プログラムを起動しないようにする
テストプログラム作成のヒント
ファイルを生成したり、更新したりするテスト
各テスト項目の最初で、存在する可能性のあるすべてのファイルを削除する関数を呼ぶ。
よくある、すでに存在するファイルがあるときは、そのテンプレートからコピーする
手動テストは、ユーザーをガイドするスクリプトを作成すること
実際にテストを実行する前に、スクリプトで、自動的に行われる動作の説明と、手動で操作する内容と
確認する内容を表示して、pause 関数を呼び出してください。
手動テストが存在することを知らせるために、Test_start 関数で、ManualTest 関数を呼び出してください。
echo_line
EchoTestStart "T_Sample"
echo "〜されるので、〜してください。"
echo "〜であること。"
pause
echo_line
（手動テストの自動部分の処理）
参考
→ samples/Test/T_TestByManual フォルダ
エラーメッセージをチェックするテスト
Dim e, e2 ' as Err2
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
e.CopyAndClear e2 '//[out] e2
echo e2.desc
Assert InStr( e2.desc, "SomeError" ) > 0
Assert e2.num <> 0
エラーの情報を Err2::CopyAndClear でコピーしてから、チェックしてください。
g_debug を設定したときに、Fail したところで正しくブレークするようになります。
CopyAndClear
→ エラーメッセージをチェックするテスト
→ 他のプログラムを起動する機能のテスト
→ ファイルを生成したり、更新したりするテスト
→ 手動テストは、ユーザーをガイドするスクリプトを作成すること
テストケースの組み合わせ
→ テストケースの組み合わせ
Dim t, t2
For Each t In DicTable(Array( _
"Case", "SrcPath", "AnsPath", Empty, _
"Default", "sample1.xml", "sample1_replaced.xml", _
"UTF8_BOM", "sample6_utf8bom.xml", "sample6_utf8bom_replaced.xml", _
"Unicode", "sample3_unicode.xml", "sample3_unicode_replaced.xml" ))
For Each t2 In DicTable(Array( _
"Case2", "DstPath", "OutPath", Empty, _
"DstNormal", "out.xml", "out.xml", _
"DstEmpty", Empty, "out.xml", _
"DstOverWrite", "out.xml", "out.xml" ))
Dic_add t, t2 : t2.RemoveAll '// cross join
'//=== setup files
...
'//=== Do test '//##################################### Test Point
Assert Convert( t("SrcPath"), t("DstPath") ) = t("AnsPath")
Next
Next
テストケースの組み合わせは多重ループで記述します。 ただし、組み合わせは必要最低限にして
ください。 テストのパラメーターは、
記述しやすくなります。
実際にテストを行うコードは、ループの最後の方にあります。
関連
→ TestNums
DicTable 関数
を使うと
Dic_add 関数
DicTable
DicTable
Dic_add
→ SQL JOIN
JoinDicTable 関数
← ▼ ▲
処理フロー (Test.vbs)
TestPrompt.vbs
Test.vbs
ターゲットプログラム
RunTestPrompt
メニューを表示
(UnitTest).vbs
を再ロード
Test_start
などをコールバック
起動
結果を報告
TestPrompt_Setting.vbs
をロード＆SetTest をコール
テストを実行
メニューを表示
テストスクリプトを起動すると、テストプロンプトが起動します。
ユーザがメニューから選択すると、テスト・プロンプトからコールバック
されるので、テストの実施などを行います。
同一プロセス内
各テスト項目
テスト・プロンプト・エンジン
テスト
スクリプト
（Test.vbs）
テスト
プロンプト
（TestPrompt.vbs）
テスト対象
プロセス
インクルード
コールバック
テスト実施
出力データ
チェック
出力
[ 親: テスト・プロンプト ]
(src)
(src)
Tests::DoAllTest
→ 呼び出し順序
(src)
TestScript::Finish
→ Setting_buildTestPrompt
← ▼ ▲
データ構造 (Test.vbs)
TestPrompt
Tests
.m_Tests
.m_Menu()
MenuItem
.Sets
Dic< UnitTest >
.CurrentTest
UnitTest
in RunTestPrompt()
(src)
(src)
TestScript
g_Test
← ▼ ▲
テスト・スクリプト ver2
別の VBS ファイルを呼び出したり、ログをとったりします。
全テストのとき、ユニットテストのとき、デバッグのとき、という状況に応じて、
テストスケジューラは、臨機応変にテストスクリプトを呼び出します。
テスト処理が失敗したら、テストスクリプトからテストスケジューラに return 的に戻り、
テストスケジューラは、次のテストスクリプトを実行します。
テスト
スクリプト
テスト
スケジューラ
Do_
cscript.exe など
プロセス起動
→ TestPrompt クラス
→ Tests クラス
→ TestScript クラス
→ その他の関数
Tests クラスをユーザから使うためのコマンドプロンプトです。
テストをスケジューリングするクラスです。
テストスクリプトを呼び出すクラスです。
→ テストツールの接続場所
参考
テスト
→ TestsClass フォルダ
Dim ts : Set ts = new Tests
ts.AddTestScriptAuto ".", "Test.vbs"
ts.DoAllTest
サンプル
← ▼ ▲
設定ファイル TestPrompt_Setting.vbs
テスト・プロンプトに関する設定を記述したファイルです。
通常、編集しなくてもそのまま使えます。
テストシンボルと、ユニット・テスト・プロンプトの VBS ファイルのあるパスの
対応関係を記述します。
テスト・プロンプトのメニュー項目を記述します。
prompt.m_Menu(1).m_Caption = "1. Do ALL Test"
prompt.m_Menu(1).m_OpType = prompt.Op_AllTest
fo = "test\"
Set t= tests.AddTestScript( "T_Fold1", fo+"T_Fold1.vbs" )
tests.AddTestScriptAuto tests.BaseFolderPath, "Test.vbs"
または
Setting_buildTestPrompt 関数
に設定を記述してください。
サンプル
→ TestPrompt_Setting_default.vbs # Setting_buildTestPrompt
← ▼ ▲
RunTestPrompt
Sub RunTestPrompt( Opt )
(src)
Opt
Empty または、Test.vbs のパス、または Writables オブジェクト
【引数】
テスト・プロンプトを開きます。
Opt に Empty を指定すると、サブフォルダにある Test.vbs もテストします。
Opt に
Test.vbs
のパスを指定すると、そのテストだけをテストします。
Opt に Test.vbs のパスを指定しなかったときのログのファイル名は、Test_logs.txt、
指定したときのログのファイル名は、Test_log.txt になります。
Sub main2( Opt, AppKey )
RunTestPrompt AppKey.NewWritable( "." )
End Sub
サンプル
コールツリー
RunTestPrompt
main2
TestPrompt::DoPrompt
TestPrompt::DoTest
Opt に Writables オブジェクトを指定すると、その設定を使い、、サブフォルダに
ある Test.vbs もテストします。
Test.vbs に記述する関数
（Test_build など） を呼び出します。
テスト・プロンプトで選択したメニュー項目によって、
関連
→ GetTemporaryTestsObject
← ▼ ▲
TestPrompt クラス
Tests クラス
をユーザから使うためのコマンドプロンプトです。
.DoPrompt
(src)
(src)
← ▼ ▲
Tests クラス
.AddTestScriptAuto
テストをスケジューリングするクラスです。
.CurrentSymbol
現在設定されているテストシンボル、 "T_ALL"など
.BaseFolderPath
as string
as string
テストツリーのベース（ルート）フォルダのパス
.CurrentTestPriority
テストの優先度
.Symbol
as string
現在実行しているテストのテストシンボル
(src)
.m_bAutoDiff
AutoDiff モード
Delegate はココ
フォルダに含まれるすべての Test.vbs をロードします。
.CurrentTest
as
UnitTest
現在実行しているテストの情報、
.LoadTestSet
実施を行うテスト・シンボルを読み込む
テスト
→ [T_LoadTestSet]
→ T_TestSet フォルダ
を有効にするかどうか
← ▼ ▲
Tests::AddTestScriptAuto
Function Tests::AddTestScriptAuto( BasePath, FName )
(src)
フォルダに含まれるすべてのテスト項目スクリプト（Test.vbs）が呼び出せるようにします。
【引数】
BasePath
FName
検索するフォルダ
テスト項目スクリプトのファイル名（通常 Test.vbs）
返り値
なし
→ ○ [T_AddAuto] テスト項目の自動追加
テスト
← ▼ ▲
Tests::AddTestScript
Function Tests::AddTestScript( Symbol, FileName )
テスト項目スクリプト（Test.vbs）が呼び出せるようにします。
【引数】
Symbol
FileName
テストシンボル
テスト項目スクリプトのファイル名（通常 Test.vbs）
返り値
なし
(src)
← ▼ ▲
Tests::CurrentTestPriority
Dim Tests::CurrentTestPriority as integer
呼び出し順序を決めるための、現在のテストの優先度
Sub Test_current( tests )
tests.CurrentTestPriority = 500
End Sub
→ サブフォルダの関数の呼び出し順序
(src)
デフォルトは 1000 です。
サンプル
→ Test_current
参考
← ▼ ▲
Tests::Symbol
Dim Tests::Symbol as string
現在のテストの識別子（テスト・シンボル）
デフォルトは、Test.vbs があるフォルダーの名前です。
→ Test_current
参考
← ▼ ▲
Tests::SetCurrentSymbol
Function Tests::SetCurrentSymbol( Symbol as string ) as integer
現在のテストの識別子（テスト・シンボル）を選択します。
全てのテストを選択するときは、"ALL" を指定してください。
返り値は、0=成功、1=失敗
← ▼ ▲
Tests::DoAllTest
Sub Tests::DoAllTest()
→ 2. Do ALL Test
(src)
コールツリー
Tests::DoAllTest
すべてのテストを実施します。
参考
TestScript::Do_
関連
→ Tests::DoTest
call_vbs_t
Test_start など
(src)
TestScript::Finish
ShakerSort_fromDic
TestScript::Start
テストする順番を整列する
テスト・スクリプトへコールバックする
→ 処理フロー （テスト・プロンプト）
参考
g_fs.OpenTextFile
ExecuteGlobal
If en <> 0 Then Err.Raise en,, ed
'//=== Echo the Test title
echo
If en = E_TestPass Then
TestScript::m_nPass = m_nPass + 1
テストの結果をまとめる
For Each CurrentTest '// as UnitTest
( CurrentTest.ScriptPath, "Test_start", Me as Tests )
テストのループ
Tests::OnTestFunctionSetup
m_Symbol = Me.CurrentTest.Symbol
TestScript::m_nPass = 0
テストの集計をリセットする
m_Symbol = Me.CurrentTest.Symbol
Tests::OnTestFunctionFinish
( CurrentTest.ScriptPath, "Test_current", Me as Tests )
(src)
TestScript::Do_
← ▼ ▲
Tests::DoTest
Sub Tests::DoTest( Func as string, bReverse as Boolean )
3. call each "Test_build" in sub folders
など、テスト関数の１つを実行します。
【引数】
Func
bReverse
呼び出す関数の名前
複数の Test.vbs の関数を逆順に呼び出します。(*1)
→ サブフォルダの関数の呼び出し順序
(*1)
(src)
関連
→ Tests::DoAllTest
サブフォルダーにあるテスト・スクリプトで定義されている、Func に指定した名前の
関数もコールバックされます。
True にすると、Test_clean と同じ順序に呼び出します。
← ▼ ▲
Tests::SetCur
Sub Tests::SetCur( SubSymbol )
デバッグを行うサブテストシンボルを設定します。
Test_current の中から呼び出してください。
指定したサブテストシンボルのテスト項目だけ実施するようになります。
→ Tests::IsCur
Sub Test_current( tests )
tests.SetCur "SubTestA"
End Sub
Sub Test_start( tests )
If tests.IsCur( "SubTestA" ) Then
'// Do SubTestA
End If
If tests.IsCur( "SubTestB" ) Then
'// Do SubTestB
End If
Pass
End Sub
デバッグが済んだら、"" を設定してください。
(src)
テスト
→ T_SubTest\Test_target.vbs#SetCur
← ▼ ▲
Tests::IsCur
Function Tests::IsCur( SubSymbol )
指定のサブテストシンボル、または "" が設定されているか判定します。
Test_start など（Test_current 以外）の中から呼び出します。
→ Tests::SetCur
(src)
テスト
→ T_SubTest\Test_target.vbs#IsCur
関連
← ▼ ▲
Tests::SaveTestResultHtml
Sub Tests::SaveTestResultHtml( SavePath as string )
テストの結果を HTML 形式で出力します。
【引数】
SavePath
出力ファイルパス。 Empty のとき "TestResult.html"
ファイル：
TestScript.vbs
(src)
→ T_SomeTests.vbs # T_TestReport
テスト
出力サンプル：
書きかけ
← ▼ ▲
Tests::SaveTestResultCSV
Sub Tests::SaveTestResultCSV( SavePath as string )
テストの結果を CSV 形式で出力します。
【引数】
SavePath
出力ファイルパス。 Empty のとき "TestResult.csv"
ファイル：
TestScript.vbs
出力サンプル：
(src)
Test symbol,result,step,path,priority
T_SomeTests,Pass,,TestOfTest2.vbs,1000
T_SampA,Pass,,T_SampA\TestOfTest2.vbs,1000
T_SampB,Fail,Test_check,T_SampB\TestOfTest2.vbs,1000
T_SampC,Skip,Test_setup,T_SampC\TestOfTest2.vbs,1000
→ T_SomeTests.vbs # T_TestReport
テスト
← ▼ ▲
Tests::LoadTestResultCSV
Sub Tests::LoadTestResultCSV( LoadPath as string )
テストの結果を CSV 形式で出力します。
【引数】
LoadPath
出力ファイルパス。 Empty のとき "TestResult.csv"
ファイル：
TestScript.vbs
(src)
← ▼ ▲
TestScript クラス、g_Test 変数
テストスクリプトを呼び出すクラスです。
グローバル変数 g_Test は、TestScript クラスのオブジェクトを参照しています。
→ TestScript::Finish
→ TestScript::Do_
→ TestScript::Start
テストを開始します。 ログ取りを開始します。
テスト関数を呼び出します。（同じプロセス）
テストを終了します。 ログ取りを終了して集計します。
→ テスト・スクリプトのテスト
(src)
← ▼ ▲
TestScript::Start
Sub TestScript::Start
テストを開始します。 ログ取りを開始します。
カレントテストのスクリプトがあるフォルダに、TestScript_log.txt
ができます。
(src)
← ▼ ▲
TestScript::Do_
Sub TestScript::Do_( vbs_path as string, func as string, param as variant )
テスト関数を呼び出します。（同じプロセス）
【引数】
vbs_path
func
テスト・スクリプトが書かれた VBScript ファイルのパス
呼び出す関数の名前（文字列）
param
関数に渡すパラメータ
Do の後に、アンダーラインがあるので注意してください。（無いとエラーになるため）
(src)
←
↓