Erstellen von Tests in Skriptsprachen
Zusätzlich zu C++ und C# unterstützt TAEF Erstellungstests in Skriptsprachen.
Sie erstellen Skriptkomponenten mit einer beliebigen Skriptsprache, die die Microsoft COM Scripting-Schnittstellen unterstützt. Skriptsprachen, die diese Schnittstellen unterstützen, sind JScript, Microsoft Visual Basic Scripting Edition (VBScript), PERLScript, PScript, Ruby und Python.
Aktuelle Einschränkungen der Skripttesterstellung
Standardmäßig unterstützt Windows nur JScript und VBScript.
Skripttestdateiformat
Für Skriptsprachtests verwendet TAEF ein leicht geändertes Windows Script Components Dateiformat. Die folgenden Beispiele zeigen eine Testdatei, die VBScript- und JScript-Testklassen enthält.
1 <?xml version="1.0" ?>
2
3 <!-- Debugging helpers -->
4 <!-- error Set this to true to display detailed error messages for syntax or run-time errors in the script component.-->
5 <!-- debug Set this to true to enable debugging. If this debugging is not enabled, you cannot launch the script debugger for a script -->
6 <?component error="true" debug="true"?>
7
8 <package>
9 <!-- Test module metadata -->
10 <ModuleProperty name="Owner" value="Someone"/>
11
12 <!-- Define a test class -->
13 <component id="VBSampleTests">
14 <!-- define and instantiate a logger -->
15 <object id="Log" progid="WEX.Logger.Log" />
16
17 <!-- include a reference to the logger so you could use the constants defined in logger library -->
18 <reference guid="e65ef678-a232-42a7-8a36-63108d719f31" version="1.0"/>
19
20 <!-- Test class metadata -->
21 <TestClassProperty name="DocumentationUrl" value="http://shelltestkb/"/>
22
23 <public>
24 <!-- Define a test method with metadata -->
25 <method name="TestOne">
26 <!-- Test method metadata -->
27 <TestMethodProperty name="Priority" value="1"/>
28 </method>
29
30 <!-- Define a test method without metadata -->
31 <method name="TestTwo"/>
32 </public>
33
34 <script language="VBScript">
35 <![CDATA[
36 Function TestOne()
37 Log.Comment("Calling TestOne")
38 End Function
39
40 Function TestTwo()
41 Log.Comment("Calling TestTwo")
42 End Function
43 ]] >
44 </script>
45 </component>
46
47 <!-- Define another test class -->
48 <component id="JScriptSampleTests">
49 <object id="Log" progid="WEX.Logger.Log" />
50
51 <!-- need reference to use logger constants -->
52 <reference guid="e65ef678-a232-42a7-8a36-63108d719f31" version="1.0"/>
53
54 <public>
55 <!-- Test setup and cleanup methods are declared using corresponding type = '' attributes -->
56 <method name="ClassSetup" type="TestClassSetup"/>
57 <method name="ClassCleanup" type="TestClassCleanup"/>
58 <method name="MethodSetup" type="TestMethodSetup"/>
59 <method name="MethodCleanup" type="TestMethodCleanup"/>
60
61 <method name="TestOne"/>
62 <method name="TestTwo"/>
63 </public>
64
65 <!-- Setup and Cleanup methods return false on failure -->
66 <script language="JScript">
67 <![CDATA[
68 function ClassSetup()
69 {
70 Log.Comment("Calling class setup");
71 return true;
72 }
73
74 function ClassCleanup()
75 {
76 Log.Comment("Calling class cleanup");
77 return true;
78 }
79
80 function MethodSetup()
81 {
82 Log.Comment("Calling method setup");
83 return true;
84 }
85
86 function MethodCleanup()
87 {
88 Log.Comment("Calling method cleanup");
89 return true;
90 }
91
92 function TestOne()
93 {
94 Log.Comment("Calling TestOne");
95
96 // For the purpose of demonstration, declare the test failed
97 Log.Result(TestResult_Failed);
98 }
99
100 function TestTwo()
101 {
102 Log.Comment("Calling TestTwo");
103 }
104 ]] >
105 </script>
106 </component>
107 </package>
Dieses Beispiel ist eine XML-Datei und beginnt mit einem normalen XML-Header:
<?xml version="1.0" ?>
Sie konfigurieren Debugeinstellungen für Ihre Datei, indem Sie den Attributfehler und das Debuggen festlegen:
<?component error="true" debug="true"?>
- Legen Sie fehler auf true fest, um detaillierte Fehlermeldungen für Syntax- oder Laufzeitfehler in der Skriptkomponente anzuzeigen.
- Legen Sie debug auf true fest, um das Debuggen zu aktivieren. Wenn das Debuggen nicht aktiviert ist, können Sie den Skriptdebugger für ein Skript nicht starten (z. B. mit dem Debug-Schlüsselwort (keyword) in JScript-Code).
Das <Package-Element> schließt Testklassendefinitionen in eine WSC-Datei ein. Nach diesem Element können Sie Metadaten auf Modulebene einfügen, indem Sie ModuleProperty-Elemente hinzufügen:
<ModuleProperty name = "Owner" value = "Someone"/>
Das ModuleProperty-Element muss die Attribute name und value enthalten.
Das Component-Element startet die Deklaration für die Skripttestklasse. Dieses Element sollte immer über ein id-Attribut verfügen, das auf den Klassennamen festgelegt ist.
Nach dem Component-Element können Sie Metadaten auf Klassenebene einfügen, indem Sie das TestClassProperty-Element verwenden. Wie beim ModuleProperty-Element muss es über die Attribute name und value verfügen.
An diesem Punkt können Sie auch Objekte erstellen und Verweise auf die Objekte definieren. Weitere Informationen finden Sie im Abschnitt Andere Komponenten . Die Zeilen 15, 18, 49 und 52 im XML-Beispiel zeigen, wie auf wex verwiesen und initialisiert wird . Logger.Log-Objekt .
Das <öffentliche> Element schließt die Testmethodendeklarationen des Testskriptmoduls ein. Sie deklarieren eine Testmethode, indem Sie den Testmethodennamen im name-Attribut eines <Methodenelements> angeben. Sie können auch die Testmethodeeigenschaft innerhalb des <Methodenelements> hinzufügen. Wie bei Eigenschaften auf anderen Ebenen ist dies nicht obligatorisch. Wenn Sie sie jedoch hinzufügen, müssen Sie die Attribute name und value einschließen.
Das <script-Element> identifiziert die Testskriptsprache und umschließt die Implementierung der Testmethoden.
Die <![ Der Abschnitt CDATA[]]> enthält die tatsächliche Implementierung der Tests , also den code, der in der Skriptsprache geschrieben wurde. In diesem Abschnitt implementieren Sie die Testmethoden, die Sie im <Abschnitt public></public> deklariert haben.