(for Internet Explorer)
Sub  TestScript::Finish
テストを終了します。 ログ取りを終了して集計します。
TestScript クラスのデストラクタによってテストが終了しますが、
明示的にこの Finish を呼び出して終了させることもできます。
(src)
Class  UnitTest
  Public  Symbol     ' as string
  Public  ScriptPath ' as string
  Public  Priority   ' as integer
  Public  Delegate   ' as variant
End Class
(src)
Function  GetTemporaryTestsObject() as Tests
一時的な Tests オブジェクトを生成し、Test_current を呼び出します。
【引数】
返り値
テスト・オブジェクト
ファイル:
TestScript.vbs
Sub  Main( Opt, AppKey )
  Dim  g : Set g = GetTemporaryTestsObject().CurrentTest.Delegate
  RunTestPrompt  AppKey.NewWritable( Array( ".", g("PublicFolder") ) )
End Sub

Sub  Test_current( tests )
  If IsEmpty( tests.CurrentTest.Delegate ) Then
    Dim g : Set g = CreateObject( "Scripting.Dictionary" ) : Set tests.CurrentTest.Delegate = g

    '[Setting]
    '==============================================================================
    g("PublicFolder")  = "..\Public\FromPackage"
    '==============================================================================
  End If
End Sub
主に、Test_current で取得できるデータを、RunTestPrompt を呼び出す前に参照するときに使います。
テスト
→ T_TempTests フォルダ
GetTemporaryTestsObject().CurrentTest は、同じファイルの中にある Test_current 関数などの引数
に渡るオブジェクトを指しています。
サンプル
Sub  CheckTestErrLevel( errorlevel as integer )
VBS プログラムの終了コード(エラーレベル)に問題があったらエラーを発生させる。
【引数】
errorlevel
関連
エラーレベル(WScript.Quit の引数)
内部で、Pass, Fail, Skip のいずれかを呼び出します。
VBS プログラムは、wscript ではなく cscript で呼び出さないと、正しいエラーレベル
を取得できません。
  r = RunProg( "cscript sample.vbs", "" )
  CheckTestErrLevel  r
サンプル
(src)
Dim  g_IsAutoTest as boolean
自動テストを実行中かどうか。
g_IsAutoTest = True にすると、
しなくなることがあります。
テスト対象となるスクリプトが使うもの
Sub  T_Test1( Opt, AppKey )
  Dim  x

  Dim cases : Set cases = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1" )
  For Each x  In cases.Items
    T_Test1_main  Opt, AppKey, x  '// Test.vbs の中では、パラメーターは ( tests, x )
  Next
  Pass
End Sub

'// ループが増えてもインデントを深くさせなくて済むように、テストの実施は *_main 関数にする
Sub  T_Test1_main( Opt, AppKey, x )
  Dim w_:Set w_=AppKey.NewWritable( "out" ).Enable()
  EchoTestStart  "T_Test1"
  echo  x  '// 全てのデータを表示する

  FuncA  CInt( x("InputData") )
  FuncB  Replace( x("Answer"), "%Num%", CStr( 12 ) )
End Sub
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases name="common" ExeName="Sample">
<!-- base_data="...\TestCommon_Data.xml#root" -->

<TestCase id="TestCase_for_T_Test1" base_data="#common">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"  _comment2= "FilePath with variable"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
/>
</TestCase>

<TestCase id="TestCase_for_T_Test1_sub"> <!-- This is cross parameter -->
<SubCase  name="CurrentFolder"
  CurrentFolder = "."
  StepPath      = "Data\"
/>
<SubCase  name="SubFolder"
  CurrentFolder = "Data"
  StepPath      = ""
/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
Function  ReadTestCase( XmlPath as string, TestCaseID as string )
                                            as ArrayClass of Dictionary
テストケースが書かれた XML ファイルのデータにアクセスするオブジェクトを返します。
【引数】
XmlPath
TestCaseID
テストケースが書かれた XML ファイルのパス
XML ファイルの中の <TestCase> タグの id 属性の値、または Empty
TestScript.vbs
返り値
テストケースのデータ(の配列)
ファイル:
テスト
(src)
→ T_TestCaseData.vbs # T_TestCaseData
テストケースのデータの多くは構造体の配列であるため、XML ファイルの書式は、それを想定
して、ある程度決めています。  この標準化により、XML ファイルを見たときにテストケースが
把握しやすくなりますし、テスト・スクリプトのコードも DOM より簡単になります。 書式の詳細は、
下記の DTD を参照してください。
もし、複雑なデータを記述したいときは、一般的な XML ファイルをアクセスする DOM を使って
ください。 参考
サンプル・コード:
T_Test1_Data.xml
TestCase_for_T_Test1
Answer
InputData
TestCases、TestCase、SubCase のタグ名を変えることはできません。

XML タグの中(例:SubCase タグの中) に <!-- --> 形式のコメントは入れたいときは、
XMLの仕様上できないので、ダミーとなる  _comment1 などの属性を使って、コメントを
記述します。
返り値は、辞書型を要素に持つ配列(ArrayClass)です。 辞書のキーは、XML 属性の名前です。
データの具体的な値は、下記のサンプル XML ファイルを参照してください。
・得られるデータはすべて文字列型です。
・数値を使うときは、CInt 関数などを使います。
・辞書のキーに指定した名前に対応する XML 属性が存在しないときは、Empty を返します。
・複数のデータをコンマで区切って記述したときは、
・動的に変化するデータを XML ファイルに記述するときは、%Num% のように変数を記述します。
 ただし、テスト・スクリプトで Replace 関数や
・#name (HTML の href 属性)のリンク先を得るには、
などを使います。
テストケースが書かれた XML ファイルの書式
InputData
Answer
TestCase_for_T_Test1
TestCase_for_T_Test1_sub
関連
Function  ReadTestCase( XmlPath as string, Empty ) as Dictionary
→ TestNums (clib)
TestCases
TestCase
SubCase
SubCase
SubCase
TestCase
TestCase
SubCase
TestCase
TestCases
デバッグ用に、テストケースを指定します
スクリプト・ファイル内のデータ
C言語のテスト番号
T_Test1
T_Test1
T_Test1
などを使って値を設定してください。
を使ってください。
属性値の扱い方
辞書を使ったテストデータ
複数のテストケースで共通のデータは、
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases ExeName="Sample" name="common">
<!-- base_data="...\TestCommon_Data.xml#root" -->

<TestCase id="TestCase_for_T_Test1" CommonData1="1" base_data="#common">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"  _comment2= "FilePath with variable"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
#common
common
を指定するか、
TestCase タグの属性に記述できます。
<?xml version="1.0" encoding="Shift_JIS"?>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"  _comment2= "FilePath with variable"
  CommonData1 = "1"  ExeName = "Sample.exe"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
  CommonData1 = "1"  ExeName = "Sample.exe"
/>
</TestCase>

</TestCases>
上のファイルと下のファイルは、同じテスト・データになります。
CommonData1
CommonData1
CommonData1
ExeName
ExeName
ExeName
  Dim test_common_data : Set test_common_data = ReadTestCase( SearchParent(_
    "TestCommon_Data.xml" ), Empty ) '// test_common_data as <TestCases>

  start  test_common_data( "ExeName" )
<TestCases> タグの内容をリードするときは、下記のようにします。
Sub  T_Test1( Opt, AppKey )
  Dim  x

  Dim xx : Set xx = ReadTestCase( "T_Test1_Data.xml", Empty ) '// xx as <TestCases>

  Dim cases : Set cases = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1" )
  For Each x  In cases.Items
    Dic_add  x, xx
    T_Test1_main  Opt, AppKey, x
  Next
  Pass
End Sub

'// ループが増えてもインデントを深くさせないため、テストの実施は *_main 関数にする
Sub  T_Test1_main( Opt, AppKey, x )
  echo  x
  FuncA  CInt( x("InputData") )
  FuncB  x("CommonData1")
End Sub
T_Test1_Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<TestCases
  CommonData1 = "Sample.exe"
>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"  _comment2= "FilePath with variable"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
/>
</TestCase>

</TestCases>
CommonData1
TestCases
CommonData1
複数のテストケースで共通のデータを、XML ファイルの TestCases タグの属性からリードするときは、
ReadTestCase の第2引数を Empty に指定してください。
サンプル XML ファイル: T_Test1_Data.xml
Empty
T_Test1
T_Test1
T_Test1
複数のテスト・プログラムで共通のデータは、親フォルダーにある共通の XML ファイルからリードして
ください。
Set xx = ReadTestCase( SearchParent("TestCommon_Data.xml"), Empty ) '// xx as <TestCases>
ReadTestCase がリードする XML ファイルは、データの記述が冗長にならないように、データの継承や集約
ができる特殊な XML が使えます。
XML 属性を継承します
継承した XML 属性は CSV 形式で追加します
子の XML 要素を集約します
<!ELEMENT TestCases (TestCase*)>
<!ELEMENT TestCase (SubCase*)>

<!ATTLIST TestCases
    *          CDATA    #IMPLIED
    name       ID       #IMPLIED
    base_data  IDREFS   #IMPLIED
    plus_attr  NMTOKENS #IMPLIED
>
<!ATTLIST TestCase
    *          CDATA    #IMPLIED
    id         ID       #REQUIRED
    base_data  IDREFS   #IMPLIED
    plus_attr  NMTOKENS #IMPLIED
    aggregate  IDREFS   #IMPLIED
>
<!ATTLIST SubCase
    *          CDATA    #IMPLIED
    name       ID       #IMPLIED
    base_data  IDREFS   #IMPLIED
    plus_attr  NMTOKENS #IMPLIED
>
テストデータを記述する XML ファイルの DTD
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="Number"   InputData = "123"  base_data="#T_Test1_Common"/>
<SubCase  name="Alphabet" InputData = "ABC"  base_data="#T_Test1_Common"/>
<SubCase  name="AlphaNum" InputData = "1AB"  Answer="ans2.txt"/>
</TestCase>

<TestCase id="TestCase_for_T_Test1_Common">
<SubCase  name="T_Test1_Common"  Answer="ans1.txt"/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
データの多くは共通で、一部のデータだけ変えるときは、base_data 属性を使って属性を継承することが
できます。 base_data 属性は、A タグの href 属性と同じ記述形式です。 別のファイルから継承する
こともできます。
T_Test1_Common
T_Test1_Common
T_Test1_Common
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="Number"   InputData = "123"  Answer="ans1.txt"/>
<SubCase  name="Alphabet" InputData = "ABC"  Answer="ans1.txt"/>
<SubCase  name="AlphaNum" InputData = "1AB"  Answer="ans2.txt"/>
</TestCase>

</TestCases>
上のファイルと下のファイルは、同じデータになります。
Answer="ans1.txt"
Answer="ans1.txt"
ファイルパスに、ピリオドを3つ並べると、親フォルダー、親の親フォルダー … と探していきます。
参考
テスト
→ T_TestCaseData.vbs # [T_BaseTestCaseData]
→ T_TestCaseData.xml # T_BaseTestCaseData_1 など
CSV 形式のデータを、別のタグから追加するときは、plus_attr 属性を使います。
plus_attr 属性の値は、属性の値を CSV 形式で並べます。
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="a" InputDataA="123" InputDataB="123"
          base_data="#T_Test1_Common" plus_attr="InputDataA"/>
</TestCase>

<TestCase id="TestCase_for_T_Test1_Common">
<SubCase  name="T_Test1_Common" InputDataB="ABC" InputDataB="ABC"/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
InputDataA
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="a" InputDataA="123, ABC" InputDataB="123"/>
</TestCase>

</TestCases>
上のファイルと下のファイルは、同じデータになります。
InputDataA
テスト
→ T_TestCaseData.vbs # [T_BaseTestCaseData]
→ T_TestCaseData2.xml # T_BaseTestCaseData_22 など
InputDataA
TestCase タグの子の SubCase タグに、別の TestCase タグの子を追加するときは、
aggregate 属性を使います。
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1" aggregate="#TestCase_Common">
<SubCase  name="a" InputDataA="123" InputDataB="123"/>
</TestCase>

<TestCase id="TestCase_for_T_Test2" aggregate="#TestCase_Common">
<SubCase  name="b" InputDataA="123" InputDataB="ABC"/>
</TestCase>

<TestCase id="TestCase_Common">
<SubCase  name="c" InputDataA="ABC" InputDataB="ABC"/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="a" InputDataA="123" InputDataB="123"/>
<SubCase  name="c" InputDataA="ABC" InputDataB="ABC"/>
</TestCase>

<TestCase id="TestCase_for_T_Test2">
<SubCase  name="b" InputDataA="123" InputDataB="ABC"/>
<SubCase  name="c" InputDataA="ABC" InputDataB="ABC"/>
</TestCase>

</TestCases>
上のファイルと下のファイルは、同じデータになります。
TestCase_Common
TestCase_Common
TestCase_Common
テスト
→ T_TestCaseData.vbs # [T_BaseTestCaseData]
→ T_TestCaseData.xml # T_AggregateTestCaseData_1 など
SubCase
SubCase
SubCase
Sub  T_Test1( Opt, AppKey )
  Dim  x, y, mix

  Dim cases_x : Set cases_x = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1_x" )
  Dim cases_y : Set cases_y = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1_y" )
  Set mix = CreateObject( "Scripting.Dictionary" )
  For Each y  In cases_y.Items
    For Each x  In cases_x.Items
      mix.RemoveAll : Dic_add  mix, x : Dic_add  mix, y
      T_Test1_main  Opt, AppKey, mix
    Next
  Next
  Pass
End Sub

'// ループが増えてもインデントを深くさせないため、テストの実施は *_main 関数にする
Sub  T_Test1_main( Opt, AppKey, x )
  echo  x
  FuncA  x("InputData"), ReadFile( x("CurrentFolder") +"\file.txt" )
End Sub
<?xml version="1.0" encoding="UTF-8"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1_x">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"  _comment2= "FilePath with variable"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
/>
</TestCase>

<TestCase id="TestCase_for_T_Test1_y"> <!-- This is cross case -->
<SubCase  name="CurrentFolder"
  CurrentFolder = "."
  StepPath      = "Data\"
/>
<SubCase  name="SubFolder"
  CurrentFolder = "Data"
  StepPath      = ""
/>
</TestCase>

</TestCases>
InputData
CurrentFolder
サンプル XML ファイル: T_Test1_Data.xml
テストケースの値が、表の縦軸と横軸にあり、表の全てをテストする場合は、下記のように二重ループに
して、Dic_add を使ってテストデータを結合します。
T_Test1
T_Test1
T_Test1
Sub  T_Test1( Opt, AppKey )
    Set t = CreateObject( "Scripting.Dictionary" )

    For Each  endian  In Array( "LittleEndian", "BigEndian" )
        For Each  language  In Array( "VBScript", "C" )
            t("Endian") = endian
            t("Language") = language
            T_Test1_Main  t
        Next
    Next

    Pass
End Sub


'// ループが増えてもインデントを深くさせないため、テストの実施は *_Main 関数にする
Sub  T_Test1_Main( Opt, AppKey, x )
  echo  x
  FuncA  x("Endian"), x("Language")
End Sub
Sub  T_Test1( Opt, AppKey )
  Dim  x

  Dim cases : Set cases = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1" )
  Set x = cases.LookUpDic( "name", "Alphabet" )
  T_Test1_main  Opt, AppKey, x
  Pass
End Sub
SubCase タグの中から、特定のタグだけ選択するときは、ArrayClass の LookUpDic を使ってください。
<?xml version="1.0" encoding="Shift_JIS"?>
<TestCases>

<TestCase id="TestCase_for_T_Test1">
<SubCase  name="Number"
  InputData = "123"
  Answer    = "ans%Num%.txt"
/>
<SubCase  name="Alphabet"
  InputData = "ABC"
  Answer    = "ans2.txt"
/>
</TestCase>

</TestCases>
サンプル XML ファイル: T_Test1_Data.xml
"name", "Alphabet"
Sub  T_Test1( Opt, AppKey )
  Dim  x, y

  Dim cases : Set cases_x = ReadTestCase( "T_Test1_Data.xml", "TestCase_for_T_Test1" )
  For Each x  In cases_x.Items
    For Each y  In Array( 2, 3 )
      x("y") = y
      T_Test1_main  Opt, AppKey, x
      x.Remove  "y"
    Next
  Next
  Pass
End Sub

'// ループが増えてもインデントを深くさせないため、テストの実施は *_main 関数にする
Sub  T_Test1_main( Opt, AppKey, x )
  echo  x
  FuncA  x("InputData"), ReadFile( x("y") +"\file.txt" )
End Sub
テストケースの値を XML ファイルではなく、スクリプトに埋め込む場合は、下記のように代入します。
x("y") = y
( 2, 3 )
T_Test1
T_Test1
T_Test1
x("y")
x.Remove  "y"