(for Internet Explorer)
テストプロンプトのメニューから選んだときのデフォルトの動作を説明します。
の test_build, test_setup, test_start, test_check, test_clean を呼び出します。
test_current は、test_build などそれぞれを呼び出す前に呼び出します。
4. Setup the test
の test_current と test_build を呼び出します。
7. Clean
6. Check the result
5. Do the unit test on Debugger
Test.vbs の test_current と test_setup を呼び出します。
Test.vbs の test_current と test_start を呼び出します。
Test.vbs の test_current と test_check を呼び出します。
Test.vbs の test_current と test_clean を呼び出します。
1. Select the Test
実行するテスト項目(
)を選択します。
T_ALL を選択すると、すべてのテスト項目を実行します。
8. Change the Debug Mode
88. Open Fail Folder
エラーがあったテストのフォルダを開きます
→ g_debug 変数
1) Reload Test Script
2) ChgDebugMode Test Script
3) ChgDebugMode Test Target
4) Echo On/Off (current=on)
5) AutoDiff (current=on)
テスト・プロンプトのトップメニューで、Change the Debug Mode を選ぶと次のメニューが出ます。
Reload Test Script は、TestPrompt.vbs や、TestPrompt_Setting.vbs を変更したときに
選択します。 選択すると再読み込みします。
Test.vbs は、トップメニューから Test.vbs を呼び出すときに、毎回再読み込みするので、
Test.vbs を変更したときは、このメニュー(Reload Test Script)を選ぶ必要はありません。
If tests.bTargetDebug Then dbg = "//x " Else dbg = ""
r = RunProg( "cscript "+dbg+target+" /Test:"+tname, "" )
If tests.bTargetDebug Then
  '// デバッガに接続するコマンド
Else
  '// 通常のコマンド
End If
VBScript の呼び出しを、デバッガ接続に対応した例:
関連
ChgDebugMode Test Target は、テスト対象をデバッガに接続します。
ChgDebugMode Test Script は、TestPrompt.vbs と Test.vbs をデバッガに接続します。
Sub  test_start( tests )
Stop
  If ... Then Fail
  Pass
End Sub
Stop
ただし、Test.vbs のプロシージャの引数 tests の bTargetDebug メンバ変数が True に
変わるだけなので、Test.vbs の中で対応する必要があります。
Test.vbs をデバッグするときは、更に Test.vbs の中に Stop 文を入れてください。
'--- start of parameters for starting main script
g_debug = 1
  :
Sub main2( Opt, AppKey ):set_input "5."   ....
Test.vbs の先頭で下記のように記述すると、このメニューを選ばなくても、自動的にこの
モードで実行を開始し、5番のメニューを自動的に実行します。
'--- start of parameters for starting main script
g_option = "/target_debug:1 /set_input:5."
Test.vbs の先頭で次のように記述すると、自動的にこのモードで実行を開始し、
5番のメニューを自動的に実行します。
… /set_input オプションが使われるプロシージャ
テスト・プロンプトでは、デフォルトで
echo_on
された状態になりますが、
このメニューで echo_off の状態にできます。
1
5.
テスト・スクリプトは、vbslib フォルダを含むルートフォルダのサブフォルダなら、
どのフォルダにでも置くことができます。
テスト・スクリプトのファイル名は、Test.vbs にしてください。
Test.vbs をダブルクリックすると、テスト・プロンプトが開きます。
TestPrompt.vbs
test
T_UnitTest1
… "T_UnitTest1" のユニット・テスト
… テスト・プロンプト・モジュール
… テスト・プロンプトの設定
Test.vbs をダブルクリックすると、サブフォルダの Test.vbs も、テスト・プロンプトに
登録されます。 カレント・テストが ALL なら、サブフォルダも含めて test_setup などが
呼ばれます。 デバッグ・モードのときは、デバッグ・モードになっている Test.vbs を
サブフォルダも含めて呼ばれます。
… テストシンボル名と同じ名前のフォルダ
TestScript.vbs
… テスト・スクリプト・モジュール
… グローバル・テストデータ
Option Explicit

Sub main2( Opt, AppKey ):set_input "" :RunTestPrompt AppKey.NewWritable( "." ):End Sub

Sub  test_current( tests )
  tests.SetCur  "Sub1"
End Sub

Sub  test_build( tests )
  If tests.IsCur("Sub1") Then  echo tests.Symbol+" - test_build Sub1"
  If tests.IsCur("Sub2") Then  echo tests.Symbol+" - test_build Sub2"
  Pass
End Sub

Sub  test_setup( tests )
  Pass
End Sub

Sub  test_start( tests )
  EchoTestStart  "T_Sample1"
  RunProg  "target.exe", "Sample_log.txt"
  Pass
End Sub

Sub  test_check( tests )
  Fail
End Sub

Sub  test_clean( tests )
  Skip "test skip"
End Sub
→ Test.vbs
引数は、
Test.vbs
デバッグするサブテストケースを選択します。
テスト対象をビルドします。
テストデータを作成します。
テストを実行します。
テストの出力が正しいかチェックします。
テストで出力されたファイルを削除します。
サンプル
上記のプロシージャは、
から呼ばれます。 Fail したときの動きは、
Do_ の仕様に従います。
T_RunFCBat
T_RunPrompt
T_RunVBS
FCBat
を経由するテストのサンプル
VBS をテストするサンプル
単体テストを実行するスクリプトです。
汎用のサンプル
です。(上記のプロシージャはどれも引数は同じ)
Test.vbs の test_current には、デバッグを行う1つのサブテストケースを
tests.SetCur で指定します。
T_Run
テストプロンプトをテストするサンプル
vbslib_pack\sample\TestPrompt
(src)
Sub  test_start( tests as Tests )
main
を呼び出してください。
の内容を記述することで作成します。
テストプロンプトから、大量の Test.vbs を自動的に実行することができます。
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 を
で実行すると、問題がある
場所でブレークします。
多くの場合、テスト対象のプログラムの出力値チェックでエラーになっているので、Test.vbs を
で実行します。
FCBat を使っているときは、
Test_logs.txt を「書き込みできない」とき、テスト・プロンプトが二重に起動して同じファイルを
開こうとしているときがあります。そのときは、テスト対象が Test.vbs なら下記の /log オプション
を、テスト・スクリプトを使った VBS なら、 main で、m_DefLogFName を設定してください。
/log:TestTarget_logs.txt
g_Test.m_DefLogFName = "TestTarget_logs.txt"
テスト・プロンプト自体をデバッグするときは、デバッグモード(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.
で、テストを1つだけ指定したときは、Test_log.txt に記録されます。
関連
AutoDiff モードを有効にすると、テストが失敗したときにテストログを解析して、
Diff ツールを起動します。
→ Setting_getDiffPath
解析機能は、コマンドプロンプトの fc コマンドの出力に対応しています。
ソース
テストに Fail したときの対応のヒントを説明します。
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
追加順序
T_UnitTest1 と T_UnitTest2 の順番は変わることがあります。
14
13
15
16
17
18
関連
Tests::CurrentTestPriority を設定することで、テストの順番を変えることができます。
テスト・プロンプトは、サブフォルダにある Test.vbs も呼び出しますが、その呼び出す
順序を説明します。
Option Explicit

Dim  g_SrcPath
Class  SampleTest_vbs
  Public  FullPath
  Private Sub  Class_Initialize()
    FullPath = g_SrcPath
  End Sub
End Class
Dim  g_SampleTest_vbs
Set  g_SampleTest_vbs =_
   new SampleTest_vbs

Const  F_Built = 1  '// Validate Flags

 
'*************************************************************************
'  <<< [get_SampleTest] >>>
'*************************************************************************
Dim  g_SampleTest
Function  get_SampleTest()
  If IsEmpty( g_SampleTest ) Then
    Set  g_SampleTest = new SampleTest
  End If
  g_SampleTest.ChkToolsExists
  Set  get_SampleTest = g_SampleTest
End Function

 
'-------------------------------------------------------------------------
' ### <<<< [SampleTest] Class >>>>
'-------------------------------------------------------------------------
Class  SampleTest
  Public Property Get  DefineInfo() : Set DefineInfo = g_SampleTest_vbs :_
     End Property
  Public  m_Exe_D
  Public  m_Exe_R
  Public  m_Sub

  Private Sub Class_Initialize
    Me.m_SrcPath = GetAbsPath( "..\..\src", g_SampleTest_vbs.FullPath )
    Me.m_Exe_D = Me.m_SrcPath +   "\Debug\App.exe"
    Me.m_Exe_R = Me.m_SrcPath + "\Release\App.exe"
  End Sub
End Class

 
App
App
vbslib\SampleTest.vbs
Sub  test_setup( tests )
  Dim  t : Set t = get_SampleTest()
  copy  t.m_SrcPath + "\Template\data\*", "data"
  Pass
End Sub

Sub  test_start( tests )
  Dim  t : Set t = get_SampleTest() : t.Validate( F_Built )
  test_start2  tests, t, t.m_Exe_D
  test_start2  tests, t, t.m_Exe_R
  Pass
End Sub

Sub  test_start2( tests, t, ExePath )
  Dim  r

  r = RunProg( """" + ExePath + """", "" )
  If r <> 1 Then  Fail
End Sub
Tests.vbs : グローバル・テスト・オブジェクトの使用例
t.m_Exe_D
実行ファイルのパスなど、全てのテスト項目で共通するデータ(グローバルテスト・・オブジェクト
)は、get_SampleTest を呼び出して取得します。(Sample は、プログラム名に置き換えます)

テストが出来る状況にするため、Validate メソッドを呼び出し、必要となる状況をパラメータに
指定します。 Validate メソッドで、状況に応じてビルドなどが行われます。

以上は、vbsool の「静的オブジェクト」 に準拠しています。
t.m_Exe_R
に SampleTest.vbs を追加してください。
get_SampleTest
Validate
..\..\src
get_SampleTest の定義を作成するときは、
\SampleTest.vbs ファイルを新規に作り、
参考
WaitForFile で待つ
Setting_getEditorCmdLine などを、プログラムを起動しないようにする
テストプログラム作成のヒント
ファイルを生成したり、更新したりするテスト
各テスト項目の最初で、存在する可能性のあるすべてのファイルを削除する関数を呼ぶ。
よくある、すでに存在するファイルがあるときは、そのテンプレートからコピーする
TestPrompt.vbs
ターゲットプログラム
RunTestPrompt
メニューを表示
(UnitTest).vbs
を再ロード
test_start
などをコールバック
起動
結果を報告
TestPrompt_Setting.vbs
をロード&SetTest をコール
テストを実行
メニューを表示
テストスクリプトを起動すると、テストプロンプトが起動します。
ユーザがメニューから選択すると、テスト・プロンプトからコールバック
されるので、テストの実施などを行います。
同一プロセス内
各テスト項目
テスト・プロンプト・エンジン
テスト対象
プロセス
インクルード
テスト実施
出力データ
チェック
出力
(src)
(src)
Tests::DoTest
(src)
(src)
TestScript::Finish
テスト対象となるスクリプトが使うもの
Sub  EchoTestStart( TestSymbol as string )
テストシンボルをエコー出力します。
EchoTestStart  "T_Samp1"
<<< [T_Samp1] >>>
サンプル1
サンプルの出力
EchoTestStart  tests.Symbol
サンプル2
(src)
Sub  Pass
テストがパスしたことを、テストスクリプトに知らせて、プログラムを終了します。
(src)
内部的には、エラー 21 が発生します。
関連
Sub  Fail
テストが失敗したことを、テストスクリプトに知らせて、プログラムを終了します。
エラーが発生したときと同じ動きをします。つまり、Fail の後は実行しません。
(src)
Sub  Skip
テストが実行できないことを、テストスクリプトに知らせて、プログラムを終了します。
エラーが発生したときと同じ動きをします。つまり、Skip の後は実行しません。
(src)
Sub  ManualTest( TestSymbol as string )
テストが手動テストであることを、テストスクリプトに知らせます。
ManualTest  tests.Symbol
サンプル
参考
(src)
自動テストで済ませることが多いので、手動テストは最低限にしてください。
ManualTest  "T_Sample1"
SkipToSection  0
サンプル: セクション番号を表示する
Sub  SkipToSection( Num as integer )
指定した番号のセクションより前のセクションをスキップするように設定します。
【引数】
Num
次に実行するセクション番号
通常、メイン関数から呼び出します。
はじめは 0 を指定して、セクション番号を echo 出力させます。
次に、スキップしたいセクションを調べて、次に実行したいセクション番号を指定します。
SkipToSection  5
サンプル: セクション番号 5 から実行する( 5 より前は実行をスキップする。)
(src)
関連
セクション番号は、下記のように echo 出力されます。 SkipToSection を一度も呼んで
いないときや、スキップ中は出力されません。
<Section num='4'/>
テスト
→ T_SkipToSection フォルダ
一度も SkipToSection が呼ばれていないときは、グローバル変数 g_SkipSection が
Empty になっています。
サンプル: セクション番号を表示させない、かつ、実行のスキップをしない。
SkipToSection  Empty
(src)
Function  NotSkipSection() as boolean
本関数を呼び出した場所をセクションの開始場所とします。
【引数】
返り値
SkipToSection で設定されたセクション以降かどうか
サンプル:
  For Each i  As arr
    If NotSkipSection() Then
      DoTest
    End If
  Next
本関数を呼び出すとセクション番号を+1します。
SkipToSection が呼ばれていたら、セクション番号を echo 出力します。
関連
<Section num='5'/>
echo 出力の例:
別の VBS ファイルを呼び出したり、ログをとったりします。
全テストのとき、ユニットテストのとき、デバッグのとき、という状況に応じて、
テストスケジューラは、臨機応変にテストスクリプトを呼び出します。
テスト処理が失敗したら、テストスクリプトからテストスケジューラに return 的に戻り、
テストスケジューラは、次のテストスクリプトを実行します。
テスト
スクリプト
テスト
スケジューラ
Do_
cscript.exe など
プロセス起動
参考
Tests クラスをユーザから使うためのコマンドプロンプトです。
テストをスケジューリングするクラスです。
テストスクリプトを呼び出すクラスです。
→ テストツールの接続場所