(for Internet Explorer)
← ▼ ▲
↑
Test.vbs のコマンドライン・オプション
コマンドライン・オプションを指定して起動すると、メニューから選択することなく、自動的に
テストの実施などを行うことができます。
@echo off
echo テストのビルド・ステップを実行します。
pause
cscript Test.vbs /Build
サンプル： BuildTest.bat
/Build
Test_build 関数を呼び出します。 呼び出したら、プロセスを終了します。
次のオプションがあります。
/Case:TestSymbol
TestSymbol に指定したテスト・シンボルの Test.vbs を選択します。
/Case オプションが無いときは、すべての Test.vbs を選択します。
Test_setup 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Setup
/Check
Test_check 関数を呼び出します。 呼び出したら、プロセスを終了します。
Test_start 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Start
Test_clean 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Clean
/All
Test.vbs の Test_build, Test_setup, Test_start, Test_check, Test_clean を
呼び出します。 呼び出したら、プロセスを終了します。
関連
→ テスト・スクリプト ver2
VBS から Test.vbs を呼び出す
テスト
→ T_Prpt フォルダ
/log
テストのログのファイル名。 デフォルトは、"Test_logs.txt"
← ▼ ▲
Fail したとき
[ 親: テスト・プロンプト ]
Test_start などでエラーが発生しても、エラーがあったことを表示して、Test_logs.txt に記録
するだけで、次のテスト関数を呼び出しに行きます。
[FAIL] Fail the Test
in "Test_start" function in "C:\home\vbslib_pack\_src\T_Priority\Test.vbs"
Test_logs.txt には、エラーが発生した Test.vbs のフル・パスと、テスト関数が記録されて
います。
Test_logs.txt に記録されている Test.vbs を
デバッグモード(Script)
で実行すると、問題がある
場所でブレークします。
多くの場合、テスト対象のプログラムの出力値チェックでエラーになっているので、Test.vbs を
→ Fail したテスト項目を特定する (FCBat)
デバッグモード(Target)
で実行します。
FCBat を使っているときは、
Test_logs.txt を「書き込みできない」とき、テスト・プロンプトが二重に起動して同じファイルを
開こうとしているときがあります。 そのときは、下記の /log オプションを指定して Test.vbs を
起動するか、Main 関数の先頭で、m_DefLogFName にログ・ファイルの名前を設定してください。
cscript Test.vbs /log:TestTarget_logs.txt
Sub Main( Opt, AppKey )
g_Test.m_DefLogFName = "TestTarget_logs.txt"
RunTestPrompt AppKey.NewWritable( "." )
End Sub
テスト・プロンプト自体をデバッグするときは、デバッグモード(Script) で実行してブレークする
場所に、Stop 命令を記述し、cscript.exe //x で、Test.vbs を実行してください。
Sub main2( Opt, AppKey ):set_input "5." :RunTestPrompt AppKey.NewWritable( "." ):End Sub
1.エラー状況を確認する
2.繰り返し実行する環境を作る
テスト・プロンプトへの入力を自動化することで、繰り返しテストを実行することを簡単にします。
Tests.vbs
3.デバッガに接続して、問題のある場所で止める
5.
RunTestPrompt
で、テストを１つだけ指定したときは、Test_log.txt に記録されます。
Test_logs.txt, Test_log.txt
関連
旧 AutoDiff モード
AutoDiff モードを有効にすると、テストが失敗したとき、テスト・ログの中にコマンドプロンプトの
テストに Fail したときの対応のヒントを説明します。
（旧版）
→ エラーが発生した瞬間のスクリプト内部の様子を調べる
→ エラー・ブレークを有効にする
fc コマンド
の出力（テキストの差分表示）があれば、Diff ツールを起動します。
→ Setting_getDiffCmdLine
Diff ツールの設定
Sub Main( Opt, AppKey )
g_Test.m_bAutoDiff = True
RunTestPrompt AppKey.NewWritable( "." )
End Sub
m_bAutoDiff
→ [T_AutoDiff] 自動的に Diff ツールを開く
テスト
廃止されました。
AssertFC
ver4 では、m_bAutoDiff_ に変えると動きますが、今後は無くなります。
を使ってください。
← ▼ ▲
サブフォルダの関数の呼び出し順序
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
→ Select the Test メニュー
呼び出し順序を確認する
← ▼ ▲
他のプログラムを起動する機能のテスト
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
'// Error Handling Test
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
e.CopyAndClear e2 '// Set "e2"
echo e2.desc
Assert InStr( e2.desc, "SomeError" ) >= 1
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 関数
echo 出力して、その内容が正しいことをチェックするテスト
Sub T_Example( Opt, AppKey )
Set w_= AppKey.NewWritable( "_log.txt" ).Enable()
RunProg "cscript //nologo T_Wildcard.vbs T_Example_Main", "_log.txt"
AssertFC "_log.txt", "T_Example_ans.txt"
del "_log.txt"
Pass
End Sub
Sub T_Example_Main( Opt, AppKey )
echo GetTestResult()
Pass
End Sub
RunProg で子プロセスを起動し、その出力をファイルにリダイレクトします。
子プロセスで実行するスクリプトは、直接起動することもできます。 たとえば、下記のスクリプト
では、T_Example_Main を起動します。
→ echo 出力して、その内容が正しいことをチェックするテスト
関連
→ % を使った文字列変換関数
← ▼ ▲
処理フロー (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
Tests::DoAllTest
SectionTree
(src)
section
← ▼ ▲
テスト・スクリプト 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
RunTestPromptConfigClass
Opt に
のオブジェクトを指定できます。
← ▼ ▲
RunTestPromptConfigClass
ソース
.Writable
.ExpectedPassConut
Writables
integer
RunTestPrompt
の設定。
→ TestPrompt.vbs
string
.TestTargetVBS_Path
→ NewWritable (AppKeyClass)
テスト対象の Test.vbs のパス
→ ExpectedPassConut (TestScript)
RunTestPrompt
に指定します。
← ▼ ▲
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 フォルダ
を有効にするかどうか
Test.vbs に記述するコールバック関数
の引数です。
← ▼ ▲
AddTestScriptAuto (Tests)
Function Tests::AddTestScriptAuto( BasePath, FName )
(src)
フォルダに含まれるすべてのテスト項目スクリプト（Test.vbs）が呼び出せるようにします。
【引数】
BasePath
FName
検索するフォルダ
テスト項目スクリプトのファイル名（通常 Test.vbs）
返り値
なし
→ ○ [T_AddAuto] テスト項目の自動追加
テスト
← ▼ ▲
AddTestScript (Tests)
Function Tests::AddTestScript( Symbol, FileName )
テスト項目スクリプト（Test.vbs）が呼び出せるようにします。
【引数】
Symbol
FileName
テストシンボル
テスト項目スクリプトのファイル名（通常 Test.vbs）
返り値
なし
(src)
← ▼ ▲
CurrentTestPriority (Tests)
Dim Tests::CurrentTestPriority as integer
呼び出し順序を決めるための、現在のテストの優先度
Sub Test_current( tests )
tests.CurrentTestPriority = 850
End Sub
→ サブフォルダの関数の呼び出し順序
(src)
デフォルトは 1000 です。
サンプル
→ Test_current
参考
値の例：
・ソースをビルドする = 700番台
・テスト・ライブラリをビルドする = 800番台
・テスト・プログラムをビルド＆実行する = 900番台
・サンプル・プログラムをビルド＆実行する = 1000番台
← ▼ ▲
Symbol (Tests)
Dim Tests::Symbol as string
現在のテストの識別子（テスト・シンボル）
デフォルトは、Test.vbs があるフォルダーの名前です。
→ Test_current
参考
← ▼ ▲
SetCurrentSymbol (Tests)
Function Tests::SetCurrentSymbol( Symbol as string ) as integer
現在のテストの識別子（テスト・シンボル）を選択します。
全てのテストを選択するときは、"ALL" を指定してください。
返り値は、0=成功、1=失敗
← ▼ ▲
GetCallingOrder (Tests)
Sub Tests::GetCallingOrder( out_UnitTests as UnitTest )
(src)
サブフォルダの関数の呼び出し順序
を取得します。
← ▼ ▲
DoAllTest (Tests)
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_
TestPrompt::DoPrompt
←
↓