(for Internet Explorer)
← ▼ ▲
↑
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 のテスト仕様
プログラムが大きくなるほど、テスト（回帰テスト）の自動化が重要になります。
← ▼ ▲
テスト・プロンプト (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 をダブルクリックして起動します。
→ 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
)を選択します。
T_ALL を選択すると、すべてのテスト項目を実行します。
→ デバッグモード
8. Change the Debug Mode
→ Tests::DoTest
[ 親: テスト・プロンプト Test.vbs ]
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 は、テスト対象をデバッガに接続します。
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
… 全ユニット・テストに共通のスクリプト
… 全ユニット・テストに共通の設定データ
vbslib400
← ▼ ▲
Test.vbs
Option Explicit
Sub main2( 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_clean
テストで出力されたファイルを削除します。
サンプル
TestScript::Do_
上記の関数は、
から呼ばれます。 Fail したときの動きは、
Do_ の仕様に従います。
Test.vbs のテンプレート
T_RunFCBat
T_RunPrompt
T_RunVBS
FCBat
を経由するテストのサンプル
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)
← ▼ ▲
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 変数の値を変更してください。
← ▼ ▲
UnitTest::Delegate
ユーザ向けの、任意の値やオブジェクトを格納する変数。
Dim UnitTest::Delegate as variant
Sub Main( Opt, AppKey )
include SearchParent( "TestCommon.vbs" ) '// TestCommon_setVariables
'// Dim g : 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
'// TestCommon_setVariables g
'[Setting]
'==============================================================================
g("ExeName") = "Sample"
g("Config") = "Release" '// "Debug" or "Release"
'==============================================================================
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( g )
AssertExist env("%SAMPLEROOT%") '// 環境変数をチェックする
g("LocalConfig") = "Debug" '// g はテスト(Test.vbs)ごとに存在する UnitTest::Delegate
If IsEmpty( g_TestCommon_ConfigInited ) Then '// プロセスごとの設定
Dim xx : Set xx = ReadTestCase( SearchParent("TestCommon_Data.xml"), Empty )
set_ "Config", xx("Config")
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
TestCommon_setVariables g '// g("Config")
'[Setting]
'==============================================================================
g("ExeName") = "Sample"
'==============================================================================
End Sub
Sub Main()
include SearchParent("TestCommon.vbs") '// TestCommon_setVariables
Dim g : GetMainSetting g
devenv_rebuild g("ExeName")+".sln", g("Config")
End Sub
TestCommon_setVariables
TestCommon_setVariables
TestCommon_setVariables
TestCommon_setVariables
RunTestPrompt を実行する場合は、Delegate を使う
RunTestPrompt を実行しない場合は、Delegate を使わない
Sample
ExeName
ExeName
→ TestCommon.vbs
"Config", xx("Config")
g("LocalConfig") = "Debug"
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
← ▼ ▲
TestCommon.vbs
Test.vbs
TestCommon.vbs
Sub main2( Opt, AppKey )
include SearchParent( "TestCommon.vbs" )
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
TestCommon_setVariables g '// g("GlobalTestObject")
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"/>
← ▼ ▲
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 フォルダ
← ▼ ▲
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_ に変えると動きますが、今後は無くなります。
を使ってください。
←
↓