(for Internet Explorer)
Sub  KillProcess( Process as integer or string )
プロセスを強制終了します。
【引数】
プロセスの PID、または、実行ファイル名
Process
ファイル:
System.vbs
サンプル
KillProcess  "notepad.exe"
(src)
実行ファイル名を指定した場合、その実行ファイルから作られたすべての
インスタンスが強制終了します。
参考
→ taskkill (バッチファイル)
テスト
→ T_Process.vbs # [T_Processes]
その他
指定したシンボルの関数が定義されているかどうかを返します。
→ FCBat テストツール
→ テストツール
→ テストツールの接続場所
関連
→ vbslib のテスト仕様
プログラムが大きくなるほど、テスト(回帰テスト)の自動化が重要になります。
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 をダブルクリックして起動します。
テスト・プロンプトのトップメニュー
プロンプトの設定
単体のテスト・スクリプト
(src: TestPrompt)
(src: Tests)
関連
テスト
→ テスト・プロンプトのテスト
Test.vbs
テストプロンプトのメニューから選んだときのデフォルトの動作を説明します。
の Test_build, Test_setup, Test_start, Test_check, Test_clean を呼び出します。
Test_current は、Test_build などそれぞれを呼び出す前に呼び出します。
4. call each "Test_setup" in sub folders
の 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 を呼び出します。
実行するテスト項目(
)を選択します。
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/Off
1
5.
エラーが発生する場所が安定しないときは、エラー・ブレークを有効にしてください。
エラーが発生してもテストの続きを実行しなくなりますが、エラーが発生したところで
ブレークします。
注意: Pass 関数を呼び出したときもブレークしてしまいます。
テスト・スクリプトでも通常の方法でエラーが発生した場所でブレークできます。
参考
テスト・スクリプトは、scriptlib フォルダを含むルートフォルダのサブフォルダなら、
どのフォルダにでも置くことができます。
テスト・スクリプトのファイル名は、Test.vbs にしてください。
Test.vbs をダブルクリックすると、テスト・プロンプトが開きます。
TestPrompt.vbs
Test
T_UnitTest1
… "T_UnitTest1" のユニット・テスト
… テスト・プロンプト・モジュール
… テスト・プロンプトの設定
Test.vbs をダブルクリックすると、サブフォルダの Test.vbs も、テスト・プロンプトに
登録されます。 カレント・テストが ALL なら、サブフォルダも含めて Test_setup などが
呼ばれます。 デバッグ・モードのときは、デバッグ・モードになっている Test.vbs を
サブフォルダも含めて呼ばれます。
… テストシンボル名と同じ名前のフォルダ
TestScript.vbs
… テスト・スクリプト・モジュール
… ユニット・テスト 全体
… 全ユニット・テストに共通のスクリプト
… 全ユニット・テストに共通の設定データ
vbslib400
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_start がすべて完了後、テストの出力が正しいかチェックします。
テストで出力されたファイルを削除します。
サンプル
上記の関数は、
から呼ばれます。 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 を自動的に実行することが
できます。 ファイル名を TestSample.vbs に変えたら、サブ・フォルダーにある TestSample.vbs
を自動的に実行します。
Test_build などをコールバックする前にコールバックされる関数。
→ T_TestScName フォルダ
テスト
Test.vbs から改名するテスト
関連
・デバッグするサブテストケースを選択します。
Sub  Test_current( tests )
  tests.SetCur  "Sub1"
End Sub
Sub  Test_current( tests as Tests )
Test_build などをコールバックする前にコールバックされる関数。
下記のようなことができます。
・Tests.vbs のグローバル変数(の代わり)を初期化します。
・他の Tests.vbs と、コールバックされる順番を調整します。
Sub  Test_current( tests )
  tests.CurrentTestPriority = 500
End Sub
・テスト・シンボルを設定します。
Sub  Test_current( tests )
  tests.Symbol = "T_SubTest"
End Sub
Symbol
"Already defined test symbol" エラーが出るときは、
上記のように Symbol 変数の値を変更してください。
ユーザ向けの、任意の値やオブジェクトを格納する変数。
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
関連
'********************************************************************************
'  <<< [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
サンプル 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
RunTestPrompt を実行する場合は、Delegate を使う
RunTestPrompt を実行しない場合は、Delegate を使わない
Sample
ExeName
ExeName
"Config", xx("Config")
g("LocalConfig") = "Debug"
コールツリー (Test.vbs)
Test_current
TestCommon_setVariables
Tests::DoAllTest
RunTestPrompt
main
GetMainSetting
TestCommon_setVariables
コールツリー (一般スクリプト)
// テストごとに異なる UnitTest::Delegate
// 全テストに共通の UnitTest::Delegate など
// 全スクリプト共通の UnitTest::Delegate など
// スクリプト・ファイルごとに異なる UnitTest::Delegate
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 関数で、グローバル・テスト・
オブジェクトを生成し、
から参照します。
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
<TestCases TestSymbols="T_Sample1, T_Sample2"/>
を選んだときに実施するテストを選択します。
Test.vbs の
この属性が無いときは、サブ・フォルダーにある全てのテストを実施します。
実施するテストのシンボルを CSV 形式で指定してください。
Test.vbs の
シンボルが多いときは、改行を入れることができます。
<TestCases TestSymbols="T_Sample1, T_Sample2,
   T_Sample3"/>
を選ぶと、シンボルを一覧できます。
テストに関する情報をまとめたデータ・ファイルです。
ダブルクリックする Test.vbs と同じフォルダーに TestCommon_Data.xml を作成してください。
参考
参考
その他、オリジナル属性
テスト固有のオリジナル属性を、TestCommon_Data.xml に含めることができます。
<TestCases TestSymbols="T_Sample1, T_Sample2"
 TestScriptFileName="Test_target.vbs"/>
TestScriptFileName 属性
TestScriptFileName 属性に、Test.vbs のファイル名を指定すると、そのファイル名から
起動した場合のみ、有効になります。
TestScriptFileNameExcepted 属性に、Test.vbs のファイル名を指定すると、その
ファイル名「以外」から起動した場合のみ、有効になります。
<TestCases TestSymbols="T_Sample1, T_Sample2"
 TestScriptFileNameExcepted="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 を
呼び出します。 呼び出したら、プロセスを終了します。
関連
VBS から Test.vbs を呼び出す
テスト
→ T_Prpt フォルダ
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 を「書き込みできない」とき、テスト・プロンプトが二重に起動して同じファイルを
開こうとしているときがあります。 そのときは、下記の /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.
で、テストを1つだけ指定したときは、Test_log.txt に記録されます。
関連
AutoDiff モードを有効にすると、テストが失敗したとき、テスト・ログの中にコマンドプロンプトの
テストに Fail したときの対応のヒントを説明します。
(旧版)
fc コマンド
の出力(テキストの差分表示)があれば、Diff ツールを起動します。
Diff ツールの設定
Sub  Main( Opt, AppKey )
    g_Test.m_bAutoDiff = True
    RunTestPrompt AppKey.NewWritable( "." )
End Sub
→ [T_AutoDiff] 自動的に Diff ツールを開く
テスト
廃止されました。
ver4 では、m_bAutoDiff_ に変えると動きますが、今後は無くなります。
を使ってください。