←
▼
▲
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
追加順序
2
3
1
数字に書いてある順番に Test_current 関数などがコールバックされます。
ただし、同じ深さの T_UnitTest1 と T_UnitTest2 の順番は変わることがあります。
6
5
4
2
3
1
9
8
7
14
13
15
16
17
18
Tests::CurrentTestPriority を設定することで、テストの順番を変えることができます。
テスト・プロンプトは、サブフォルダにある 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] 複数のテストスクリプト
←
▼
▲
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 したところで正しくブレークするようになります。
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
DicTable
Dic_add
→ SQL JOIN
←
▼
▲
TestPrompt.vbs
ターゲットプログラム
メニューを表示
(UnitTest).vbs
を再ロード
Test_start
などをコールバック
起動
結果を報告
TestPrompt_Setting.vbs
をロード&SetTest をコール
テストを実行
メニューを表示
テストスクリプトを起動すると、テストプロンプトが起動します。
ユーザがメニューから選択すると、テスト・プロンプトからコールバック
されるので、テストの実施などを行います。
同一プロセス内
各テスト項目
テスト・プロンプト・エンジン
テスト対象
プロセス
インクルード
テスト実施
出力データ
チェック
出力
(src)
(src)
(src)
TestScript::Finish
←
▼
▲
.m_Tests
.m_Menu()
MenuItem
.Sets
Dic< UnitTest >
.CurrentTest
in RunTestPrompt()
(src)
(src)
g_Test
←
▼
▲
別の VBS ファイルを呼び出したり、ログをとったりします。
全テストのとき、ユニットテストのとき、デバッグのとき、という状況に応じて、
テストスケジューラは、臨機応変にテストスクリプトを呼び出します。
テスト処理が失敗したら、テストスクリプトからテストスケジューラに return 的に戻り、
テストスケジューラは、次のテストスクリプトを実行します。
テスト
スクリプト
テスト
スケジューラ
Do_
cscript.exe など
プロセス起動
Tests クラスをユーザから使うためのコマンドプロンプトです。
テストをスケジューリングするクラスです。
テストスクリプトを呼び出すクラスです。
→ テストツールの接続場所
参考
テスト
→ TestsClass フォルダ
Dim ts : Set ts = new Tests
ts.AddTestScriptAuto ".", "Test.vbs"
ts.DoAllTest
サンプル
←
▼
▲
テスト・プロンプトに関する設定を記述したファイルです。
通常、編集しなくてもそのまま使えます。
テストシンボルと、ユニット・テスト・プロンプトの 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"
または
に設定を記述してください。
サンプル
→ TestPrompt_Setting_default.vbs # Setting_buildTestPrompt
←
▼
▲
Sub RunTestPrompt( Opt )
(src)
Opt
Empty または、Test.vbs のパス、または Writables オブジェクト
【引数】
テスト・プロンプトを開きます。
Opt に Empty を指定すると、サブフォルダにある Test.vbs もテストします。
Opt に
のパスを指定すると、そのテストだけをテストします。
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_build など) を呼び出します。
テスト・プロンプトで選択したメニュー項目によって、
関連
←
▼
▲
をユーザから使うためのコマンドプロンプトです。
.DoPrompt
(src)
(src)
←
▼
▲
テストをスケジューリングするクラスです。
現在設定されているテストシンボル、 "T_ALL"など
as string
as string
テストツリーのベース(ルート)フォルダのパス
テストの優先度
as string
現在実行しているテストのテストシンボル
(src)
フォルダに含まれるすべての Test.vbs をロードします。
.CurrentTest
as
現在実行しているテストの情報、
実施を行うテスト・シンボルを読み込む
テスト
→ [T_LoadTestSet]
→ T_TestSet フォルダ
を有効にするかどうか
←
▼
▲
Function Tests::AddTestScriptAuto( BasePath, FName )
(src)
フォルダに含まれるすべてのテスト項目スクリプト(Test.vbs)が呼び出せるようにします。
【引数】
BasePath
FName
検索するフォルダ
テスト項目スクリプトのファイル名(通常 Test.vbs)
返り値
なし
→ ○ [T_AddAuto] テスト項目の自動追加
テスト
←
▼
▲
Function Tests::AddTestScript( Symbol, FileName )
テスト項目スクリプト(Test.vbs)が呼び出せるようにします。
【引数】
Symbol
FileName
テストシンボル
テスト項目スクリプトのファイル名(通常 Test.vbs)
返り値
なし
(src)
←
▼
▲
Dim Tests::CurrentTestPriority as integer
呼び出し順序を決めるための、現在のテストの優先度
Sub Test_current( tests )
tests.CurrentTestPriority = 500
End Sub
(src)
デフォルトは 1000 です。
サンプル
参考
←
▼
▲
Dim Tests::Symbol as string
現在のテストの識別子(テスト・シンボル)
デフォルトは、Test.vbs があるフォルダーの名前です。
参考
←
▼
▲
Function Tests::SetCurrentSymbol( Symbol as string ) as integer
現在のテストの識別子(テスト・シンボル)を選択します。
全てのテストを選択するときは、"ALL" を指定してください。
返り値は、0=成功、1=失敗
←
▼
▲
Sub Tests::DoAllTest()
(src)
コールツリー
Tests::DoAllTest
すべてのテストを実施します。
参考
TestScript::Do_
関連
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_
←
▼
▲
Sub Tests::DoTest( Func as string, bReverse as Boolean )
など、テスト関数の1つを実行します。
【引数】
Func
bReverse
呼び出す関数の名前
複数の Test.vbs の関数を逆順に呼び出します。(*1)
(*1)
(src)
関連
サブフォルダーにあるテスト・スクリプトで定義されている、Func に指定した名前の
関数もコールバックされます。
True にすると、Test_clean と同じ順序に呼び出します。
←
▼
▲
Sub Tests::SetCur( SubSymbol )
デバッグを行うサブテストシンボルを設定します。
Test_current の中から呼び出してください。
指定したサブテストシンボルのテスト項目だけ実施するようになります。
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
←
▼
▲
Function Tests::IsCur( SubSymbol )
指定のサブテストシンボル、または "" が設定されているか判定します。
Test_start など(Test_current 以外)の中から呼び出します。
(src)
テスト
→ T_SubTest\Test_target.vbs#IsCur
関連
←
▼
▲
Sub Tests::SaveTestResultHtml( SavePath as string )
テストの結果を HTML 形式で出力します。
【引数】
SavePath
出力ファイルパス。 Empty のとき "TestResult.html"
ファイル:
TestScript.vbs
(src)
→ T_SomeTests.vbs # T_TestReport
テスト
出力サンプル:
書きかけ
←
▼
▲
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
テスト
←
▼
▲
Sub Tests::LoadTestResultCSV( LoadPath as string )
テストの結果を CSV 形式で出力します。
【引数】
LoadPath
出力ファイルパス。 Empty のとき "TestResult.csv"
ファイル:
TestScript.vbs
(src)
←
▼
▲
テストスクリプトを呼び出すクラスです。
グローバル変数 g_Test は、TestScript クラスのオブジェクトを参照しています。
テストを開始します。 ログ取りを開始します。
テスト関数を呼び出します。(同じプロセス)
テストを終了します。 ログ取りを終了して集計します。
→ テスト・スクリプトのテスト
(src)
←
▼
▲
Sub TestScript::Start
テストを開始します。 ログ取りを開始します。
カレントテストのスクリプトがあるフォルダに、TestScript_log.txt
ができます。
(src)
←
▼
▲
Sub TestScript::Do_( vbs_path as string, func as string, param as variant )
テスト関数を呼び出します。(同じプロセス)
【引数】
vbs_path
func
テスト・スクリプトが書かれた VBScript ファイルのパス
呼び出す関数の名前(文字列)
param
関数に渡すパラメータ
Do の後に、アンダーラインがあるので注意してください。(無いとエラーになるため)
(src)