Criando testes em linguagens de script
Além de C++ e C#, o TAEF dá suporte à criação de testes em linguagens de script.
Você cria componentes de script usando qualquer linguagem de script que dê suporte às interfaces de Script COM da Microsoft. As linguagens de script que dão suporte a essas interfaces incluem JScript, Microsoft Visual Basic Scripting Edition (VBScript), PERLScript, PScript, Ruby e Python.
Limitações atuais da criação de teste de script
Pronto para uso, o Windows dá suporte apenas a JScript e VBScript.
Formato de arquivo de teste de script
Para testes de linguagem de script, o TAEF usa um formato de arquivo de Windows Script Components ligeiramente modificado. Os exemplos a seguir mostram um arquivo de teste que contém classes de teste VBScript e JScript.
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>
Este exemplo é um arquivo XML e começa com um cabeçalho XML comum:
<?xml version="1.0" ?>
Defina as configurações de depuração para o arquivo definindo o erro e a depuração dos atributos:
<?component error="true" debug="true"?>
- Defina o erro como true para exibir mensagens de erro detalhadas para erros de sintaxe ou de tempo de execução no componente de script.
- Defina depuração como true para habilitar a depuração. Se a depuração não estiver habilitada, você não poderá iniciar o depurador de script para um script (como com o palavra-chave de depuração no código JScript).
O <elemento package> inclui definições de classe de teste em um arquivo .wsc . Após esse elemento, você pode inserir metadados no nível do módulo adicionando elementos ModuleProperty :
<ModuleProperty name = "Owner" value = "Someone"/>
O elemento ModuleProperty deve incluir os atributos name e value .
O elemento Component inicia a declaração para a classe de teste de script. Esse elemento sempre deve ter um atributo id definido como o nome da classe.
Após o elemento Component , você pode inserir metadados de nível de classe usando o elemento TestClassProperty . Assim como acontece com o elemento ModuleProperty , ele deve ter os atributos name e value .
Neste ponto, você também pode criar objetos e definir referências aos objetos . Consulte a seção Outros Componentes para obter mais informações. As linhas 15, 18, 49 e 52 no exemplo XML mostram como referenciar e inicializar o WEX. Objeto Logger.Log .
O <elemento público> inclui as declarações de método de teste do módulo de script de teste. Você declara um método de teste especificando o nome do método de teste no atributo name de um <elemento de método> . Você também pode adicionar a propriedade do método de teste dentro do elemento method<>. Assim como acontece com as propriedades em outros níveis, isso não é obrigatório. No entanto, se você adicioná-lo, deverá incluir os atributos de nome e valor .
O <elemento script> identifica a linguagem de script de teste e inclui a implementação dos métodos de teste.
O <![ A seção CDATA[]]> contém a implementação real dos testes – o código escrito na linguagem de script. Nesta seção, você implementará os métodos de teste declarados na <seção pública></pública> .