(for Internet Explorer)
← ▼ ▲
↑
WaitForProcess
WaitForProcess "notepad.exe"
Sub WaitForProcess( ProcessName as string )
指定したプロセスが終了するまで待ちます。
【引数】
ProcessName
実行ファイル名
ファイル：
テスト
サンプル
→ T_Process.vbs # [T_WaitForProcess]
System.vbs
(src)
← ▼ ▲
EnumProcesses
Function EnumProcesses() as dictionary of ArrayClass of integer
プロセスを一覧します。
【引数】
プロセスの一覧。 実行ファイル名をキーとする PID の配列の辞書
返り値
ファイル：
System.vbs
(src)
サンプル
Dim ps : Set ps = EnumProcesses()
echo ps.Item( "notepad.exe" ) '// ArrayClass of PID
If not ps.Exists( "notepad.exe" ) Then '// ps.Item( "notepad.exe" ).Count = 0 は不可
start "notepad.exe"
ElseIf ps.Item( "notepad.exe" ).Count >= 2 Then
echo "There are 2 processes."
End If
→ tasklist (バッチファイル)
参考
テスト
→ T_Process.vbs # [T_Processes]
← ▼ ▲
KillProcess
Sub KillProcess( Process as integer or string )
プロセスを強制終了します。
【引数】
プロセスの PID、または、実行ファイル名
Process
ファイル：
System.vbs
サンプル
KillProcess "notepad.exe"
(src)
実行ファイル名を指定した場合、その実行ファイルから作られたすべての
インスタンスが強制終了します。
参考
→ taskkill (バッチファイル)
テスト
→ T_Process.vbs # [T_Processes]
← ▼ ▲
その他
→ IsDefined
指定したシンボルの関数が定義されているかどうかを返します。
← ▼ ▲
自動テスト、開発環境
→ テスト・プロンプト (Test.vbs)
→ テスト支援機能 （関数）
→ 開発環境操作
→ FCBat テストツール
→ テストツール
→ テストツールの接続場所
→ エラー処理 （Err2）
→ テスト駆動開発（TDD）を学ぶ (Web)
関連
→ vbslib のテスト仕様
プログラムが大きくなるほど、テスト（回帰テスト）の自動化が重要になります。
vbslib の開発では、機能を追加/修正するごとに以下のものを更新しています。
コード
×
×
テストプログラム
ドキュメント
×
機能：
→ チェックリスト
参考
○
→ 標準出力への出力内容をチェックするテスト
→ ログ
→ 自動化のヒント
← ▼ ▲
テスト・プロンプト (Test.vbs)
Test Prompt [ALL]
test vbs = Test.vbs
base folder = C:\home\vbslib
1. Select the Test (current test = ALL)
2. Do ALL Test
3. | call each "Test_build" in sub folders
4. | call each "Test_setup" in sub folders
5. | call each "Test_start" in sub folders
6. | call each "Test_check" in sub folders
7. | call each "Test_clean" in sub folders
8. Change the Debug Mode (debug script=False, target=False)
88.Open Fail Folder
89.Next Fail
9. Quit
Test.vbs ファイルに記述されたコールバック関数（Test_build, Test_setup, Test_start,
Test_check, Test_clean）を呼び出すプロンプトです。 サブ・フォルダーにある Test.vbs
ファイルに記述されたコールバック関数も呼び出します。
Test.vbs をダブルクリックして起動します。
→ TestPrompt_Setting.vbs
→ テスト・フォルダーの構成
→ テスト・スクリプト ver2
Change the Debug Mode
テスト・プロンプトのトップメニュー
→ Test.vbs
プロンプトの設定
単体のテスト・スクリプト
→ メニュー項目の動作
→ メニュー項目
→ Fail したとき
(src: TestPrompt)
(src: Tests)
→ サブフォルダの関数の呼び出し順序
関連
テスト
→ テスト・プロンプトのテスト
→ TestCommon.vbs
Test.vbs
→ Test.vbs のコマンドライン・オプション
→ TestCommon_Data.xml
→ 処理フロー
→ データ構造
→ 処理フロー (Test.vbs)
→ データ構造 (Test.vbs)
← ▼ ▲
メニュー項目の動作
テストプロンプトのメニューから選んだときのデフォルトの動作を説明します。
2. Do ALL Test
→ サブフォルダの関数の呼び出し順序
Test.vbs
の Test_build, Test_setup, Test_start, Test_check, Test_clean を呼び出します。
Test_current は、Test_build などそれぞれを呼び出す前に呼び出します。
→ Tests::DoAllTest
4. call each "Test_setup" in sub folders
3. call each "Test_build" in sub folders
Test.vbs
の Test_current と Test_build を呼び出します。
7. call each "Test_clean" in sub folders
6. call each "Test_check" in sub folders
5. call each "Test_start" in sub folders
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
実行するテスト項目(
Test.vbs
、または、Test.vbs があるフォルダー)を選択します。
ALL を選択すると、すべてのテスト項目（すべてのサブ・フォルダー）を実行します。
→ デバッグモード
8. Change the Debug Mode
→ Tests::DoTest
[ 親: テスト・プロンプト Test.vbs ]
88. Open Fail Folder
エラーがあった Test.vbs があるフォルダーを開きます
「order」 と入力すると、
サブフォルダの関数の呼び出し順序
が表示されます。
と
CurrentTestPriority
次にエラーがあった Test.vbs があるフォルダーを開きます
89. Next Fail
← ▼ ▲
デバッグモード
→ 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 は、テスト対象をデバッガに接続します。
3) ChgDebugMode Test Target
ChgDebugMode Test Script は、TestPrompt.vbs と Test.vbs をデバッガに接続します。
2) ChgDebugMode Test Script
1) Reload Test Script
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番のメニューを自動的に実行します。
→ input
… /set_input オプションが使われる関数
Reload Test Script
ChgDebugMode Test Script
ChgDebugMode Test Target
5) AutoDiff
Echo On/Off
AutoDiff
→ AutoDiff モード
1
5.
4) エラー・ブレークを有効にする
エラーが発生する場所が安定しないときは、エラー・ブレークを有効にしてください。
エラーが発生してもテストの続きを実行しなくなりますが、エラーが発生したところで
ブレークします。
注意： Pass 関数を呼び出したときもブレークしてしまいます。
→ エラーが発生した瞬間のスクリプト内部の様子を調べる
テスト・スクリプトでも通常の方法でエラーが発生した場所でブレークできます。
参考
← ▼ ▲
テスト・フォルダーの構成
テスト・スクリプトは、scriptlib フォルダを含むルートフォルダのサブフォルダなら、
どのフォルダにでも置くことができます。
テスト・スクリプトのファイル名は、Test.vbs にしてください。
Test.vbs をダブルクリックすると、テスト・プロンプトが開きます。
scriptlib
TestPrompt.vbs
Test
T_UnitTest1
… "T_UnitTest1" のユニット・テスト
TestPrompt_Setting.vbs
… テスト・プロンプト・モジュール
… テスト・プロンプトの設定
Test.vbs
Test.vbs をダブルクリックすると、サブフォルダの Test.vbs も、テスト・プロンプトに
登録されます。 カレント・テストが ALL なら、サブフォルダも含めて Test_setup などが
呼ばれます。 デバッグ・モードのときは、デバッグ・モードになっている Test.vbs を
サブフォルダも含めて呼ばれます。
… テストシンボル名と同じ名前のフォルダ
→ サブフォルダの関数の呼び出し順序
setting_default
TestScript.vbs
… テスト・スクリプト・モジュール
→ Test.vbs
[ 親: テスト・プロンプト Test.vbs ]
… ユニット・テスト 全体
Test.vbs
TestCommon.vbs
TestCommon_Data.xml
… 全ユニット・テストに共通のスクリプト
… 全ユニット・テストに共通の設定データ
vbslib
← ▼ ▲
Test.vbs
Option Explicit
Sub Main( Opt, AppKey ):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 )
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
Test.vbs に記述する関数
Test_current
Test_build
テスト対象をビルドします。
Test_setup
テストデータを作成します。
Test_start
テストを実行します。 複数の項目を実行するときはチェックもします。
Test_check
Test_start がすべて完了後、テストの出力が正しいかチェックします。
エラー処理のテストは、Test_start で行います。
Test_clean
テストで出力されたファイルを削除します。
サンプル
TestScript::Do_
上記の関数は、
から呼ばれます。 Fail したときの動きは、
Do_ の仕様に従います。
Test.vbs のテンプレート
T_RunFCVbs
T_RunPrompt
T_RunVBS
FCVbs
を経由するテストのサンプル
VBS をテストするサンプル
単体テストを実行するスクリプトです。
汎用のサンプル
です。（上記の関数はどれも引数は同じ）
Tests クラス
Test.vbs の Test_current には、デバッグを行う１つのサブテストケースを
tests.SetCur で指定します。
T_Run
テストプロンプトをテストするサンプル
vbslib_pack\sample\TestPrompt
（src）
Sub Test_start( tests as Tests )
Main
を呼び出してください。
RunTestPrompt
[ マップ ]
用意された関数
の内容を記述することで作成します。
テスト・プロンプトから、サブ・フォルダーにある大量の Test.vbs を自動的に実行することが
できます。 ファイル名を TestSample.vbs に変えたら、サブ・フォルダーにある TestSample.vbs
を自動的に実行します。
Test_build などをコールバックする前にコールバックされる関数。
→ T_TestScName フォルダ
テスト
Test.vbs から改名するテスト
[ 親: テスト・プロンプト Test.vbs ]
関連
→ GetMainSetting 関数 (vbsool)
ダブルクリックすると、
テスト・プロンプト
が開きます。
::ExpectedPassConutに予想される Pass の数を設定しておくと
RunTestPromptConfigClass
よいでしょう。
→ アプリケーション (vbslib付属)
← ▼ ▲
Test_current
・デバッグするサブテストケースを選択します。
Sub Test_current( tests )
tests.SetCur "Sub1"
End Sub
Sub Test_current( tests as Tests )
Test_build などをコールバックする前にコールバックされる関数。
下記のようなことができます。
→ UnitTest::Delegate
・Tests.vbs のグローバル変数（の代わり）を初期化します。
・他の Tests.vbs と、コールバックされる順番を調整します。
Sub Test_current( tests )
tests.CurrentTestPriority = 500
End Sub
・テスト・シンボルを設定します。
Sub Test_current( tests )
tests.Symbol = "T_SubTest"
End Sub
CurrentTestPriority
Symbol
SetCur
"Already defined test symbol" エラー
上記のように Symbol 変数の値を変更してください。
が出るときは、
Set g = tests.CurrentTest.Delegate
g("ExeName") = "Sample"
→ GetMainSetting 関数
関連
← ▼ ▲
UnitTest::Delegate
ユーザ向けの、任意の値やオブジェクトを格納する変数。
Dim UnitTest::Delegate as variant
Sub Main( Opt, AppKey )
'// Set g = GetTemporaryTestsObject().CurrentTest.Delegate
RunTestPrompt AppKey.NewWritable( "." )
End Sub
Sub Test_current( tests )
If IsEmpty( tests.CurrentTest.Delegate ) Then
Set g = CreateObject( "Scripting.Dictionary" ) : Set tests.CurrentTest.Delegate = g
'// call_vbs SearchParent("TestCommon.vbs"), "TestCommon_setVariables", g
'[Setting]
'==============================================================================
g("ExeName") = "Sample"
'==============================================================================
x = WScript.Arguments.Named( "Config" ) : If not IsEmpty( x ) Then g("Config") = x
End If
End Sub
Sub Test_build( tests )
Set g = tests.CurrentTest.Delegate
devenv_rebuild g("ExeName")+".sln", g("Config")
End Sub
サンプル in Test.vbs：
Delegate
Delegate
ExeName
Sample
ExeName
Tests.vbs のグローバル変数の代わりです。
（Tests.vbs は、ExecuteGlobal を何度も行われるため、グローバル変数を置くことができません。）
テスト
→ Test_template1.vbs # Delegate
関連
→ GetMainSetting 関数 (vbsool)
'********************************************************************************
' <<< [TestCommon_setVariables] >>>
'********************************************************************************
Dim g_TestCommon_ConfigInited
Sub TestCommon_setVariables( in_out_SharedConfig )
AssertExist env("%SAMPLEROOT%") '// 環境変数をチェックする
If IsEmpty( g_TestCommon_ConfigInited ) Then '// プロセスごとの設定
Set test_common_data = ReadTestCase( SearchParent(_
"TestCommon_Data.xml" ), Empty ) '// test_common_data as <TestCases>
If IsEmpty( in_out_SharedConfig ) Then _
Set in_out_SharedConfig = CreateObject( "Scripting.Dictionary" )
Dic_add in_out_SharedConfig, test_common_data
g_TestCommon_ConfigInited = True
End If
End Sub
の中の TestCommon_setVariables 関数 のサンプル：
サンプル in TestTarget.vbs：
Dim g_g : Sub GetMainSetting( g ) : If not IsEmpty(g_g) Then Set g=g_g : Exit Sub
Set g=CreateObject("Scripting.Dictionary") : Set g_g=g
call_vbs SearchParent("TestCommon.vbs"), "TestCommon_setVariables", g
'[Setting]
'==============================================================================
g("ExeName") = "Sample"
'==============================================================================
End Sub
Sub Main()
GetMainSetting g
devenv_rebuild g("ExeName")+".sln", g("Config")
End Sub
TestCommon_setVariables
TestCommon_setVariables
RunTestPrompt を実行する場合は、Delegate を使う
RunTestPrompt を実行しない場合は、Delegate を使わない
Sample
ExeName
ExeName
→ TestCommon.vbs
AssertExist
TestCommon_Data.xml
コールツリー (Test.vbs)
Test_current
TestCommon_setVariables
Tests::DoAllTest
RunTestPrompt
main
GetMainSetting
TestCommon_setVariables
コールツリー (一般スクリプト)
ReadTestCase
// テストごとに異なる UnitTest::Delegate
// 全テストに共通の UnitTest::Delegate など
// 全スクリプト共通の UnitTest::Delegate など
// スクリプト・ファイルごとに異なる UnitTest::Delegate
TestCommon.vbs
TestCommon.vbs
TestCommon.vbs
UnitTest
参考
→ GetMainSetting 関数 (vbsool)
← ▼ ▲
TestCommon.vbs
Test.vbs
TestCommon.vbs
Sub main2( Opt, AppKey )
RunTestPrompt AppKey.NewWritable( "." )
End Sub
Sub Test_current( tests )
If IsEmpty( tests.CurrentTest.Delegate ) Then
Dim g : Set g = CreateObject( "Scripting.Dictionary" ) : Set tests.CurrentTest.Delegate = g
call_vbs SearchParent("TestCommon.vbs"), "TestCommon_setVariables", g
End If
End Sub
Sub Test_start( tests ) : TestCommon_test_start tests : Pass : End Sub
サブ・フォルダーにある Test.vbs に共通するスクリプトを記述します。
ライブラリにするほど汎用的ではないが、複数のテストで使われる関数などを記述します。
Sub TestCommon_setVariables( g )
Set g("GlobalTestObject") = new SampleTest
End Sub
Sub TestCommon_test_start( tests )
'// 複数のテストで行う処理
End Sub
TestCommon_setVariables
[ 親: テスト・プロンプト Test.vbs ]
関連
→ GetMainSetting 関数 (vbsool)
← ▼ ▲
グローバル・テスト・オブジェクト, SampleTest
TestCommon.vbs
で定義する TestCommon_setVariables 関数で、グローバル・テスト・
オブジェクトを生成し、
UnitTest::Delegate
から参照します。
Sub Test_build( tests )
Dim g : Set g = tests.CurrentTest.Delegate
RunProg """"+ g("GlobalTestObject").ExePath +"""", ""
End Sub
Sub TestCommon_setVariables( g )
Set g("GlobalTestObject") = new SampleTest
End Sub
← ▼ ▲
TestCommon_Data.xml
<TestCases TestSymbols="T_Sample1, T_Sample2"/>
TestSymbols 属性
を選んだときに実施するテストを選択します。
2. Do ALL Test
Test.vbs の
この属性が無いときは、サブ・フォルダーにある全てのテストを実施します。
実施するテストのシンボルを CSV 形式で指定してください。
Test.vbs の
シンボルが多いときは、改行を入れることができます。
<TestCases TestSymbols="T_Sample1, T_Sample2,
T_Sample3"/>
1. Select the Test
を選ぶと、シンボルを一覧できます。
テストに関する情報をまとめたデータ・ファイルです。
ダブルクリックする Test.vbs と同じフォルダーに TestCommon_Data.xml を作成してください。
参考
→ Tests::LoadTestSet
→ TestCommon.vbs の中の TestCommon_setVariables 関数 のサンプル
参考
その他、オリジナル属性
テスト固有のオリジナル属性を、TestCommon_Data.xml に含めることができます。
[ 親: テスト・プロンプト Test.vbs ]
<TestCases TestSymbols="T_Sample1, T_Sample2"
TestScriptFileName="Test_target.vbs"/>
TestScriptFileName 属性
TestScriptFileName 属性に、Test.vbs のファイル名を指定すると、そのファイル名から
起動した場合のみ、有効になります。
TestScriptFileNameExcepted 属性
TestScriptFileNameExcepted 属性に、Test.vbs のファイル名を指定すると、その
ファイル名「以外」から起動した場合のみ、有効になります。
<TestCases TestSymbols="T_Sample1, T_Sample2"
TestScriptFileNameExcepted="Test.vbs"/>
←
↓