(for Internet Explorer)
Sub  Tests::DoTest( Func as string, bReverse as Boolean )
など、テスト関数の1つを実行します。
【引数】
Func
bReverse
呼び出す関数の名前
複数の Test.vbs の関数を逆順に呼び出します。(*1)
(*1)
(src)
関連
サブフォルダーにあるテスト・スクリプトで定義されている、Func に指定した名前の
関数もコールバックされます。
True にすると、Test_clean と同じ順序に呼び出します。
Sub  Tests::SetCur( SubSymbol )
デバッグを行うサブテストシンボルを設定します。
Test_current の中から呼び出してください。
指定したサブテストシンボルのテスト項目だけ実施するようになります。
Sub  Test_current( tests )
  tests.SetCur  "SubTestA"
End Sub

Sub  Test_start( tests )
  If tests.IsCur( "SubTestA" ) Then
    '// Do SubTestA
  End If
  If tests.IsCur( "SubTestB" ) Then
    '// Do SubTestB
  End If
  Pass
End Sub
デバッグが済んだら、"" を設定してください。
(src)
テスト
→ T_SubTest\Test_target.vbs#SetCur
Function  Tests::IsCur( SubSymbol )
指定のサブテストシンボル、または "" が設定されているか判定します。
Test_start など(Test_current 以外)の中から呼び出します。
(src)
テスト
→ T_SubTest\Test_target.vbs#IsCur
関連
Sub  Tests::SaveTestResultHtml( SavePath as string )
テストの結果を HTML 形式で出力します。
【引数】
SavePath
出力ファイルパス。 Empty のとき "TestResult.html"
ファイル:
TestScript.vbs
(src)
→ T_SomeTests.vbs # T_TestReport
テスト
出力サンプル:
書きかけ
未対応
Sub  Tests::SaveTestResultCSV( SavePath as string )
テストの結果を CSV 形式で出力します。
【引数】
SavePath
出力ファイルパス。 Empty のとき "TestResult.csv"
ファイル:
TestScript.vbs
出力サンプル:
(src)
Test symbol,result,step,path,priority
T_SomeTests,Pass,,TestOfTest2.vbs,1000
T_SampA,Pass,,T_SampA\TestOfTest2.vbs,1000
T_SampB,Fail,Test_check,T_SampB\TestOfTest2.vbs,1000
T_SampC,Skip,Test_setup,T_SampC\TestOfTest2.vbs,1000
→ T_SomeTests.vbs # T_TestReport
テスト
Sub  Tests::LoadTestResultCSV( LoadPath as string )
テストの結果を CSV 形式で出力します。
【引数】
LoadPath
出力ファイルパス。 Empty のとき "TestResult.csv"
ファイル:
TestScript.vbs
(src)
テストスクリプトを呼び出すクラスです。
グローバル変数 g_Test は、TestScript クラスのオブジェクトを参照しています。
テストを開始します。 ログ取りを開始します。
テスト関数を呼び出します。(同じプロセス)
テストを終了します。 ログ取りを終了して集計します。
→ テスト・スクリプトのテスト
(src)
Sub  TestScript::Start
テストを開始します。 ログ取りを開始します。
カレントテストのスクリプトがあるフォルダに、TestScript_log.txt
ができます。
(src)
Sub  TestScript::Do_( vbs_path as string, func as string, param as variant )
テスト関数を呼び出します。(同じプロセス)
【引数】
vbs_path
func
テスト・スクリプトが書かれた VBScript ファイルのパス
呼び出す関数の名前(文字列)
param
関数に渡すパラメータ
Do の後に、アンダーラインがあるので注意してください。(無いとエラーになるため)
(src)
Sub  TestScript::Finish
テストを終了します。 ログ取りを終了して集計します。
TestScript クラスのデストラクタによってテストが終了しますが、
明示的にこの Finish を呼び出して終了させることもできます。
(src)
Dim  TestScript::ExpectedPassConut as integer
予想される Pass の数。
==========================================================
Test Finish (Pass=155, Manual=6, Skip=0, Fail=0)
ExpectedPassConut = 155 [OK]
サンプル
一致した時の表示例
一致しなかったら、[FAIL] と表示されます。
ExpectedPassConut が設定されていないときは、ExpectedPassConut の行を表示しません。
ソース
→ TestScript.vbs
テスト
→ T_Prpt フォルダー
関連
Test.vbs を使うとき
::ExpectedPassConut
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 = g_sh.Run( "cscript sample.vbs",, True )
  CheckTestErrLevel  r
(src)
関連
サンプル
から VBScript のスクリプトを呼び出して、子プロセスでエラーが発生すると、
親プロセスの RunProg の中からエラーが発生してしまうため、終了コードを取得できません。
を使ってください。
参考
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
などを使って値を設定してください。
を使ってください。
属性値の扱い方
辞書を使ったテストデータ
ReadTestCase
複数のテストケースで共通のデータは、
<?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